#java #newline #replaceall
#java #перевод строки #замените все
Вопрос:
Мне интересно, почему я не получаю ожидаемого результата с этим:
String t = "1302248663033 <script language='javascript'>nvieorngnroeignrieogi</script>";
t.replaceAll("n", "");
System.out.println(t);
Результат является:
1302248663033 <script language='javascript'>nvieor
gnroeignrieogi</script>
Итак, мне интересно, почему n
все еще существует. Кто-нибудь знает? Является ли n каким-то особенным?
Редактировать:
Итак, у меня возникли проблемы с сопоставлением символа новой строки с a . в выражении регулярного выражения, не понимая, что нужно использовать опцию DOTALL, поэтому я добавлю, что нужно сделать здесь для дальнейшего использования:
String text = null;
text = FileUtils.readFileToString(inFile);
Pattern p = Pattern.compile("<script language='javascript'>. ?</script>n", Pattern.DOTALL);
text = p.matcher(text).replaceAll("");
out.write(text);
Ответ №1:
Строки являются неизменяемыми. Строковые операции типа replaceAll
не изменяют экземпляр, с помощью которого вы его вызываете, они возвращают новые экземпляры String. Решение состоит в том, чтобы присвоить измененную строку вашей исходной переменной.
t = t.replaceAll("n", "");
Комментарии:
1. Для переносимости между операционными системами используйте
System.getProperty("line.separator")
вместо символа перевода строки.
Ответ №2:
Да, n
является особенным. Это escape-последовательность, которая обозначает новую строку. Вам нужно экранировать это в строковом литерале, чтобы оно действительно интерпретировалось так, как вы хотите. Добавьте перед последовательностью, чтобы она выглядела следующим образом:
"\n"
Теперь ваша программа должна выглядеть следующим образом:
String t = "1302248663033 <script language='javascript'>nvieor\ngnroeignrieogi</script>";
t = t.replaceAll("\n", "");
System.out.println(t);
Конечно, если строка t
берется откуда-то, а не фактически вводится вами в программу, тогда вам нужно только добавить дополнительную косую черту в вашем вызове для replaceAll()
Отредактировано в соответствии с комментариями.
Комментарии:
1. Я пропустил другую ошибку, на которую указывали все остальные. Вам действительно нужно взять результат
replaceAll()
вызова и использовать его, а не исходную строку.
Ответ №3:
public static String escape(String s) {
return s
.replaceAll("n", "")
.replaceAll("r", "");
}