String.replaceAll() 和 \n 换行符
String.replaceAll() and \n line breaks
我试着用一个小例子来解释我的问题。
我实现了版本 1 和版本 2,但没有得到想要的结果。我必须使用哪个替换参数才能通过 replaceAll 方法获得所需的结果?
版本 1:
String s = "TEST";
s = s.replaceAll("TEST", "TEST\nTEST");
System.out.println(s);
输出:
TEST
TEST
版本 2:
String s = "TEST";
s = s.replaceAll("TEST", "TEST\nTEST");
System.out.println(s);
输出:
TESTnTEST
期望的输出:
TEST\nTEST
来自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"));
您仍然需要 2 个反斜杠,因为 \
是字符串文字的元字符。
你也可以使用不带 Matcher.quoteReplacement
的 4 个反斜杠:
- 你想要一个
\
在输出中
- 你需要用
\
转义它,因为 \
是替换字符串的元字符:\
- 您需要使用
\
对两者进行转义,因为 \
是字符串文字的元字符:\\
s = s.replaceAll("TEST", "TEST\\nTEST");
不要使用 replaceAll()
!
replaceAll()
执行 regex 搜索和替换,但您的任务不需要正则表达式 - 只需使用纯文本版本 replace()
、also 替换 all 次出现。
您需要一个文字反斜杠,它在 Java 字符串文字中编码为两个反斜杠:
String s = "TEST";
s = s.replace("TEST", "TEST\nTEST");
System.out.println(s);
输出:
TEST\nTEST
我试着用一个小例子来解释我的问题。 我实现了版本 1 和版本 2,但没有得到想要的结果。我必须使用哪个替换参数才能通过 replaceAll 方法获得所需的结果?
版本 1:
String s = "TEST";
s = s.replaceAll("TEST", "TEST\nTEST");
System.out.println(s);
输出:
TEST
TEST
版本 2:
String s = "TEST";
s = s.replaceAll("TEST", "TEST\nTEST");
System.out.println(s);
输出:
TESTnTEST
期望的输出:
TEST\nTEST
来自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; seeMatcher.replaceAll
. UseMatcher.quoteReplacement(java.lang.String)
to suppress the special meaning of these characters, if desired.
s = s.replaceAll("TEST", Matcher.quoteReplacement("TEST\nTEST"));
您仍然需要 2 个反斜杠,因为 \
是字符串文字的元字符。
你也可以使用不带 Matcher.quoteReplacement
的 4 个反斜杠:
- 你想要一个
\
在输出中 - 你需要用
\
转义它,因为\
是替换字符串的元字符:\
- 您需要使用
\
对两者进行转义,因为\
是字符串文字的元字符:\\
s = s.replaceAll("TEST", "TEST\\nTEST");
不要使用 replaceAll()
!
replaceAll()
执行 regex 搜索和替换,但您的任务不需要正则表达式 - 只需使用纯文本版本 replace()
、also 替换 all 次出现。
您需要一个文字反斜杠,它在 Java 字符串文字中编码为两个反斜杠:
String s = "TEST";
s = s.replace("TEST", "TEST\nTEST");
System.out.println(s);
输出:
TEST\nTEST