2016-03-09 4 views
-5

У меня есть одна проблема с синтаксическим разбором строк.Анализ строк, замена нового символа строки

String str = "jdaskks sms=<hello 
hi wini>"; 

Здесь вы можете видеть, новый символ строки присутствует в строке. Я написал программу, которая ищет sms= string, а затем получает подстроку от < > символов. в котором я проверяю новый символ линии и заменяю его на ' '.

Но у меня есть проблема, когда я получаю подстроку. я его заменю. но как изменить это в исходной строке str, так как я вижу изменение в подстроке не в исходной строке.

Справка приветствуется.

str.substring(j,str.indexOf('>',j+1)).replaceAll("\n", "#10"); 
here j is index of '<' 

Если я присвоить эту строку, я получу подстроку заменить символ, а не оригинальную строку заменяется символом новой строки

+0

Итак, вы просто получаете строку между '<...>' и заменяете новую строку регулярным пространством? –

+0

Возможный дубликат [Неизменность строк в Java] (http://stackoverflow.com/questions/1552301/immutability-of-strings-in-java) – david

+0

@ WiktorStribiżew Да, но мне нужно изменить исходную строку – Wini

ответ

3

Строки неизменны в Java - такие операции, как replace фактически не обновлять оригинал строка. Вы должны использовать возвращаемое значение вызова substring, например.

String updated = str.substring(j,str.indexOf('>',j+1)).replaceAll("\n", "#10"); 

Если вы хотите, чтобы заменить это в общей строке, вы можете просто сцепить это обратно в строку:

int indexOf = str.indexOf('>',j+1); 
str = str.substring(0, j) 
    + str.substring(j,indexOf).replaceAll("\n", "#10")) 
    + str.substring(indexOf); 
+0

Но, оригинальная строка будет потеряна правильно. как в моем примере, jdaskks будет потерян. я получу подстроку, а не оригинальную строку с замененным новым символом строки – Wini

+0

какую часть вы не понимаете в отношении неизменяемости? –

0

Как вы создали новый объект String, но не назначить его обратно к переменной, является причиной вашей проблемы.

1

Вы можете получить подстроку, но не назначаете ее строке или используете для отображения. Поскольку строки - immutable.

Так просто присвоить результат на новую строку:

String result= str.substring(j,str.indexOf('>',j+1)).replaceAll("\n", "#10"); 

или использовать его для отображения.

System.Out.Println(str.substring(j,str.indexOf('>',j+1)).replaceAll("\n", "#10")); 
Смежные вопросы