Java用特殊字符分割

时间:2020-02-27 15:34:34

标签: java

我下面的代码使用<div>\\$\\$PZ\\$\\$</div>对字符串进行分割,但是使用特殊字符无法正常工作。

public class HelloWorld{

     public class HelloWorld{

     public static void main(String []args){
          String str = "test<div>\\$\\$PZ\\$\\$</div>test"; 
        String[] arrOfStr = str.split("<div>\\$\\$PZ\\$\\$</div>", 2); 
        for (String a : arrOfStr) 
            System.out.println(a);
     }
}

输出os test<div>\$\$PZ\$\$</div>test

当我删除特殊字符时有效

可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

您已经知道,split(...)的参数是正则表达式,因此某些字符具有特殊含义。如果您希望参数按字面意义被处理(即不作为正则表达式),请调用Pattern.quote(String s)方法。

示例

String str = "test<div>\\$\\$PZ\\$\\$</div>test";
String[] arrOfStr = str.split(Pattern.quote("<div>\\$\\$PZ\\$\\$</div>"), 2);
for (String a : arrOfStr)
    System.out.println(a);

输出

test
test

quote()方法仅用正则表达式\Q...\E quotation模式 1 将文字文本括起来。您的<div>\$\$PZ\$\$</div>文本变为:

\Q<div>\$\$PZ\$\$</div>\E

对于固定文本,您可以自己进行操作,即以下3个版本均创建相同的正则表达式以进行拆分:

str.split(Pattern.quote("<div>\\$\\$PZ\\$\\$</div>"), 2)

str.split("\\Q<div>\\$\\$PZ\\$\\$</div>\\E", 2)

str.split("<div>\\\\\\$\\\\\\$PZ\\\\\\$\\\\\\$</div>", 2)

对我来说,第三个使用\进行转义的是最不易读/不合需要的版本。

如果有许多特殊字符要转义,则使用\Q...\E\更容易-将所有特殊字符分别转义,但很少有人使用,因此大多数人都不太了解。

quote()方法在您需要按字面意义处理动态文本时特别有用,例如用户可以配置要分割的文本。

1)quote()将正确处理包含\E的文字文本。

答案 1 :(得分:1)

此:

SELECT

打印:

String str = "test<div>\\$\\$PZ\\$\\$</div>test";
String[] arrOfStr = str.split("<div>\\\\\\$\\\\\\$PZ\\\\\\$\\\\\\$</div>", 2);
for (String a : arrOfStr) {
    System.out.println(a);
}

编辑:为什么我们需要所有这些反斜杠?这是因为我们需要处理表示正则表达式的String文字。 This page举例说明原因。实质是这样:

对于反斜杠test test ...

...匹配的模式应该是\ ...(以逃避转义)

...但是创建该模式的字符串文字必须具有一个反斜杠才能逸出两个反斜杠中的每一个:\\

此外,原来还需要转义\\\\,这使我们在字符串表示形式中有6个反斜杠。