Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > String.replaceAll


Автор: 3,14 30.3.2005, 11:50
Толи меня клинит, то ли что, вот аналог того что делается:
Код

String test = "abc\nabc";
System.out.println("Test: " + test.replaceAll("\n", "\\;"));


На выходе получаю вместо abc\;abc - abc;abc, в чём прикол?

Автор: jer1 30.3.2005, 13:25
вот так работает:
Код

String test = "abc\nabc";
System.out.println("Test: " + test.replaceAll("\n", "\\\\;")); 


подозрение, что сочетании \; что-то значит (как, наприме,   )

Автор: skalex 30.3.2005, 13:25
Код

String test = "abc\nabc";
System.out.println("Test: " + test.replaceAll("\n", "\\\\;"));


Вот блин, не успел ... smile

Автор: 3,14 30.3.2005, 13:30
Решение я и сам нашёл, мне интересно почему так происходит, плохо писать код когда в нём чего нить не понимаешь

Автор: skalex 30.3.2005, 13:45
Регулярное выражение, соответствующее символу обратной косой черты, должно быть записано как '\\\\', так как само регулярное выражение должно быть '\\' и каждый символ обратной косой черты в литеральном выражении должен быть записан как '\\'.

Автор: 3,14 31.3.2005, 09:43
Mace - второй параметр в replaceAll не является решулярным выражением, это просто строка

Автор: skalex 31.3.2005, 13:04
Цитата
Mace - второй параметр в replaceAll не является решулярным выражением, это просто строка

Ну как сказать... Конечно второй параметр - это не регулярное выражение в полном смысле этого слова, но тем не менее, он напрямую связан с ним.
Код
class Test {
   public static void main(String args[]) {
      System.out.println("abc-123-xyz".replaceAll("^([a-z]+?)-([0-9]+?)-([a-z]+?)$", "$3-$2-$1"));
   }
}

Автор: LSD 31.3.2005, 19:43
Цитата(3)
Mace - второй параметр в replaceAll не является решулярным выражением, это просто строка

Это не просто строка
Код
String test = "abc[eprst]abc";
System.out.println("Test: " + test.replaceAll("\\[(.*)\\]", "{$1}"));

Выдаст: Test: abc{eprst}abc


Цитата(JavaDoc)
Note that backslashes (\) and dollar signs ($) in the replacement string may cause the results to be different than if it were being treated as a literal replacement string. Dollar signs may be treated as references to captured subsequences as described above, and backslashes are used to escape literal characters in the replacement string.

Автор: 3,14 31.3.2005, 21:02
вот теперь всё ясно

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)