我想删除字符串中的\ n和\。首先,我移除了断路器然后移除了反斜杠。我无法一步完成。我是这样做的。
第1步
String query = " \"id\" \\$ \\nVD \\"; System.out.println(query); // "id" \$ \nVD \
Step2
query = query.replaceAll("\\\\n", ""); System.out.println(query); //"id" \$ VD \
第3步
query = query.replace("\\", ""); System.out.println(query); // "id" $ VD
在第2步中,我使用replaceAll删除断路器(\ n)。
在第3步中,我使用了replace来从字符串中删除反斜杠。第2步尝试使用n ie找到反斜杠。 \ n(断线器)所以它单独避免\(反斜杠)。我明白,因为反斜杠是一个特殊字符,我们在字符串替换方法中再使用一个来将其标识为文字。
但是在第2步中,为什么我们使用三个反斜杠来代替断路器?
答案 0 :(得分:1)
在第二步中,您实际上使用了4个后退(不是"黑色")斜杠来替换\
和n
个字符。
字符串中的\n
实际上不是新行。它们代表\
和n
字符。要在Java代码中编写此代码,您需要另一个\
来转义\
。因此,要在Java中将\n
表示为字符串,您需要执行以下操作:
String s = "\\n";
现在让我们看一下replaceAll
。 replaceAll
采用正则表达式并替换字符串中的每个匹配项。在这种情况下,您希望匹配\
后跟n
。你不能只使用这样的正则表达式:
\n
因为\n
表示"匹配新行"在正则表达式。您只想匹配\
和n
。
所以你必须使用另一个\
来逃避\
。此正则表达式匹配\
后跟n
:
\\n
现在你得到了你的正则表达式,你需要用Java代码编写它。您需要表达" 2 \
和n
"在Java字符串中。为此,您需要\
来转义字符串中的每个\
。这就是为什么你最终
"\\\\n"
以上表示正则表达式中的\\n
,字面上匹配\n
。
答案 1 :(得分:0)
您需要输入两次,因为String.replaceAll
方法使用正则表达式,而在正则表达式中,返回符号由文字字符串\n
匹配。 Java语法将字符串中的\n
转义为单个ascii符号。那么如何为正则表达式传递一个未更改的\n
字符串?你需要第二次转义它,这会导致双转义反斜杠 - \\
,\n
为\\n
在您的第2步中,您不需要"\\\\n"
您应该使用"\\n"
你需要在"\\"
的step3 instad中使用它"\\\\"
,因为没有这个,正则表达式会看到一个反斜杠,之后没有必要的指令,你会收到这个错误:
Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
^
at java.util.regex.Pattern.error(Pattern.java:1955)
at java.util.regex.Pattern.compile(Pattern.java:1702)
at java.util.regex.Pattern.<init>(Pattern.java:1351)
at java.util.regex.Pattern.compile(Pattern.java:1028)
at java.lang.String.replaceAll(String.java:2223)
at Test.main(Test.java:33)
您可以使用此单行一步退出\
和"\n"
(|
就像正则表达式中的OR一样)
query = query.replaceAll("\\n+|\\\\", "");
答案 2 :(得分:0)
A character preceded by a backslash (\) is an escape sequence and has special meaning to the compiler.
来自source