#java #character-encoding #replace
#java #кодировка символов #заменить
Вопрос:
Я попытался заменить символы в строке, которая работает иногда и не работает большую часть времени.
Я попробовал следующее:
String t = "[javatag]";
String t1 = t;
String t2 = t;
t.replace("u005B", "");
t.replace("u005D", "");
t1.replace("[", "");
t1.replace("]", "");
t2.replace("\]", "");
t2.replace("\[", "");
System.out.println(t " , " t1 " , " t2);
Результирующий вывод по-прежнему является « [javatag] , [javatag] , [javatag]
» без замены «[» и «]».
Что я должен сделать, чтобы заменить эти символы «[» и «]»?
Ответ №1:
String
объекты в java неизменяемы. Вы не можете их изменить.
Вам нужно:
t2 = t2.replace("\]", "");
replace()
возвращает новый String
объект.
Редактировать: Потому что … Я отрываюсь от пакета
И поскольку это так, аргумент на самом деле является регулярным выражением, и вы хотите избавиться от обеих скобок, вы можете использовать replaceAll()
вместо двух операций:
t2 = t2.replaceAll("[\[\]]", "");
Это позволило бы избавиться от открывающих и закрывающих скобок одним махом.
Ответ №2:
Строки неизменяемы, поэтому
t.replace(....);
ничего не делает
вам нужно присвоить выходные данные некоторой переменной, например
t = t.replace(....);
Комментарии:
1. 1 Ты дал ему
t
, я далt1
и Брайануt2
. Я думаю, у него все готово 🙂2. забавно, все в течение 4 секунд друг от друга тоже
3. Я не могу решить, смешно ли это… или грустно. 😀
4. Я вижу ваш
replace()
и я поднимаю вамreplaceAll()
5. Элу Гору тоже не стало лучше.
Ответ №3:
String
символы в Java неизменяемы, что означает, что вы не можете их изменить. Вместо этого выполните t1 = t1.replace("]", "");
. Это приведет к присвоению результата replace
t1.
Ответ №4:
String.replace таким образом не работает. Вы должны использовать что-то вроде t = t.replace("t", "")
Ответ №5:
String.replace() возвращает новую строку после замены требуемых символов. Следовательно, вам нужно сделать это таким образом:
String t = "[javatag]";
t = t.replace("[","");
t = t.replace("]","");
Комментарии:
1. Я понимаю. Я просто забыл экранировать специальные символы. Спасибо.
2. Ну, я только что проверил код и обнаружил, что он работает без экранирования строки.
3. На самом деле — вы правы, потому что я думаю, что это вызывает
replace(char, char)
. Я забыл, что была такая перегрузка.
Ответ №6:
t.replace(....);
выдает строку (возвращает строку)
вы можете переназначить имя исходной переменной на новую строку
и старая строка позже будет собрана из мусора 🙂