замена новой строки java

#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", "");
}