String's заменить все заменяет ни один - PullRequest
0 голосов
/ 09 февраля 2012

У меня есть следующий код:

System.out.println("Trace: #" +"2");
System.out.println(rv); 
        rv.replaceAll("$t",sTAB);
System.out.println("Trace: #" +"3");
System.out.println(rv); 

rv и sTAB имеют тип String.И sTAB имеет значение символа табуляции.Вывод выглядит следующим образом:

Trace: #2
is$thi$t
Trace: #3
is$thi$t

Но я ожидаю:

Trace: #2
is$thi$t
Trace: #3
is{tab}hi{tab}    

Конечно, с {tab} являются действительными символами табуляции.Можете ли вы объяснить, что не так с моим кодом?

Ответы [ 4 ]

6 голосов
/ 09 февраля 2012

replaceAll() принимает регулярное выражение и возвращает замененное String.

$ является регулярным выражением метасимвол , соответствующий концу строки.

Попробуйте использовать:

rv = rv.replaceAll("\\$t", sTAB);
2 голосов
/ 09 февраля 2012

Java String s являются неизменяемыми. Если у вас есть String, он не изменится. replaceAll фактически возвращает новую строку с заменами.

Вы должны сделать

rv = rv.replaceAll("$t",sTAB);

Также обратите внимание, что replaceAll принимает регулярное выражение. Вы, вероятно, должны избежать $.

rv = rv.replaceAll("\\$t", sTAB);
0 голосов
/ 09 февраля 2012

Вам необходимо переназначить строку rv = rv.replaceAll("$t",sTAB);

0 голосов
/ 09 февраля 2012

Нет

rv = rv.replaceAll("$t",sTAB);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...