问题
I try to explain my problem with a little example. I implemented version 1 and version 2, but I didn't get the desired result. Which replacement-parameter do I have to use to get the desired result with the replaceAll method ?
Version 1:
String s = "TEST";
s = s.replaceAll("TEST", "TEST\nTEST");
System.out.println(s);
Output:
TEST
TEST
Version 2:
String s = "TEST";
s = s.replaceAll("TEST", "TEST\\nTEST");
System.out.println(s);
Output:
TESTnTEST
Desired Output:
TEST\nTEST
回答1:
From the javadoc of String#replaceAll(String, String):
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; see Matcher.replaceAll. Use Matcher.quoteReplacement(java.lang.String) to suppress the special meaning of these characters, if desired.
s = s.replaceAll("TEST", Matcher.quoteReplacement("TEST\\nTEST"));
You still need 2 backslashes, as \
is a metachar for string literals.
You can also use 4 backslashes without Matcher.quoteReplacement
:
- you want one
\
in the output - you need to escape it with
\
, as\
is a metachar for replacement strings:\\
- you need to escape both with
\
, as\
is a metachar for string literals:\\\\
s = s.replaceAll("TEST", "TEST\\\\nTEST");
回答2:
Don't use replaceAll()
!
replaceAll()
does a regex search and replace, but your task doesn't need regex - just use the plain text version replace()
, also replaces all occurrences.
You need a literal backslash, which is coded as two backslashes in a Java String literal:
String s = "TEST";
s = s.replace("TEST", "TEST\\nTEST");
System.out.println(s);
Output:
TEST\nTEST
来源:https://stackoverflow.com/questions/37328805/string-replaceall-and-n-line-breaks