【问题标题】:Java String split("|" ) method call not working correctly [duplicate]Java String split(“|”)方法调用无法正常工作[重复]
【发布时间】:2014-09-06 16:31:15
【问题描述】:
public class SplitStr {

    public static void main(String []args) {
        String str1 = "This | is | My | Account | For | Java|";
        String str2 = "This / is / My / Account / For / Java/";
       // String[] arr = str.split("|");

        for(String item : str1.split("|")) {
            System.out.print(item);
        }
    }
}

程序可以正确使用字符串 str2,但不能使用字符串 str1 该程序中可能的流程是什么?

【问题讨论】:

  • 不工作是什么意思?请在这两种情况下显示输出。
  • 你在 str 上调用它,而不是在 str1 上。就个人而言,我很惊讶这个编译。

标签: java string split


【解决方案1】:

String#split() 需要正则表达式作为第一个参数,| 是正则表达式中的控制字符。

要让正则表达式解析器理解您的意思是按文字| 进行拆分,您需要将\| 传递给正则表达式解析器。但是\ 是Java 字符串文字中的控制字符。所以,为了让 Java 编译器明白你想将\| 传递给正则表达式解析器,你需要将"\\|" 传递给String#split() 方法。

【讨论】:

  • 很好的解释和深入的细节。 +1
【解决方案2】:

使用

str1.split("\\|")

而不是

str1.split("|")

你需要转义|

【讨论】:

    【解决方案3】:

    split 需要一个正则表达式,因为| 是正则表达式中的一个特殊字符,所以你必须对其进行转义。试试str.split("\\|")。示例:

    >>> Arrays.asList("This | is | My | Account | For | Java|".split("\\|"));
    [This ,  is ,  My ,  Account ,  For ,  Java]
    

    【讨论】: