2017-02-03 5 views
0

Я очень новичок в java и в настоящее время имею следующее требование.Удалить значение из строки, разделенной запятой.

Всякий раз, когда я нашел 12.1 в строке, его следует удалить, но это условно. для Eg Ниже

12.1,ztel,presto должен быть ztel,presto

12.1 должны быть заменены blank

12.1/7.1 ничего не делать, поскольку это отдельное значение

Я пытался делать stringValue.replace("12.1","");

основном требование если 12.1 найден запятой или только 12.1 он должен быть заменен как пустой, а другой нет.

Приведенный выше код работал частично и не работал на всех условиях.

Прошу вас посоветуйте и помогите мне учиться. Большое спасибо.

+0

Ваши требования не очень ясны. Я думаю, вы немного страдаете от проблемы [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Укажите, что _problem_ вы пытаетесь решить. Я предполагаю, что у вас есть некоторая последовательность значений, разделенных запятыми, и вы хотите удалить из нее все значения, равные '12.1'. – yeputons

+0

@yeputons: Я упомянул об условиях. 12.1 следует заменить пустым, когда значение отображается разделенным запятой или когда оно равно 12.1 иначе оно не должно –

+2

использовать этот 'stringValue.replaceAll (" (12.1,) | (12.1) "," ");' – Baby

ответ

0

если 12.1, которые должны быть заменены, как пустое это единственным слово в этой строке вы можете использовать это:

stringValue.replaceAll("^12\\.1$","blank"); 

замените снова эту строку с этим, чтобы заменить один отделенный ком:

stringValue.replaceAll("12\\.1,",""); 

окончательный код будет выглядеть следующим образом:

stringValue= stringValue.replaceAll("^12\\.1$","blank").replaceAll("12\\.1,",""); 

примечание:^средние s tart строки в то время как $ средний конец строки

+0

Я получаю следующую ошибку: Неверная escape-последовательность (допустимые - \ b \ t \ n \ f \ r \ "\ '\\) –

+0

Wow thats awesome. Отличный ответ ... Это то, что я хотел. Большое спасибо.:) –

1

Вы можете попробовать эту строкуValue.replace ("12.1,", ""); Используйте запятую после 12.7 в первом параметре.

+0

что если в случае String value = "12.1"; В то время это условие потерпит неудачу. –

0

Звучит как хороший вариант для регулярного выражения! Вы можете попробовать различные регулярные выражения для соответствия вашим данным по адресу regexr.

Я хотел бы начать с чем-то вроде

^[\d\.]+,? 
  • Начала линии: ^
  • Группы [] содержащей цифры \d или точек \. (вы должны бежать, так как . специальный символ)
  • Один или несколько из них +
  • Дополнительная запятая ,?

Вам нужно сделать что-то не соответствует записи, содержащей косую черту / - Я не знаю, как справиться с этим.

1

Первый аргумент String.replaceAll является регулярным выражением. Вы считаете ли,

yourString.replaceAll("12\\.1,?", ""); 

Теперь он будет использовать только . и не «любой символ» как . будет делать. Он также будет соответствовать запятой, если таковой имеется.

Если у вас не может быть этого, что-то конкретное, вы можете использовать отрицание.

yourString.replaceAll("12\\.1,?[^/]", ""); 

Это оставило бы 12.1/7.1.

+1

'String.replace' не принимает' regex' в качестве параметра. 'String.replaceAll' делает – Baby

+0

@Baby спасибо, исправлено. – matt

+0

@matt он ломается, когда значение 12.1/5.7. выход приближается /5.7 –