在|上拆分字符串(管道)在Java中

时间:2012-12-01 16:44:34

标签: java regex string split

我有以下文字:ARIYALUR:ARIYALUR|CHENNAI:CHENNAI|COIMBATORE:COIMBATORE|CUDDALORE:CUDDALORE|DINDIGUL:DINDIGUL|ERODE:ERODE|KANCHEEPURAM:KANCHEEPURAM|KANYAKUMARI:KANYAKUMARI|KRISHNAGIRI:KRISHNAGIRI|MADURAI:MADURAI|NAMAKKAL:NAMAKKAL|NILGIRIS:NILGIRIS|PERAMBALUR:PERAMBALUR|PONDICHERRY:PONDICHERRY|SALEM:SALEM|THANJAVUR:THANJAVUR|THENI:THENI|THIRUVALLUR:THIRUVALLUR|THOOTHUKUDI:THOOTHUKUDI|TIRUNELVELI:TIRUNELVELI|VELLORE:VELLORE|VILLUPURAM:VILLUPURAM|VIRUDHUNAGAR:VIRUDHUNAGAR|

我尝试做split("|"),但我的数组由单个字符而不是每个区组成。

3 个答案:

答案 0 :(得分:12)

|是正则表达式中的特殊符号。请改用\\|

我会解释为什么我附加了2条斜杠。要逃避|,我需要\|。但是,要表示字符串\|"\\|"是必需的,因为\本身需要在字符串横向中进行转义。

而且,正如xagyg在评论中指出的那样,split会将参数视为正则表达式。它不会被视为普通字符串。

在此用例中,您可能有兴趣了解Pattern.quote。你可以做Pattern.quote("|")。这样,所有字符都不会被视为特殊字符。

答案 1 :(得分:0)

您需要在重复|的元字符OR之前使用转义字符。 此外,由于您需要将split中的正则表达式作为String传递,因此您还需要转义转义字符。

尝试以下:

    String str = "ARIYALUR:ARIYALUR|CHENNAI:CHENNAI|COIMBATORE:COIMBATORE|CUDDALORE:CUDDALORE|DINDIGUL:DINDIGUL|ERODE:ERODE|KANCHEEPURAM:KANCHEEPURAM|KANYAKUMARI:KANYAKUMARI|KRISHNAGIRI:KRISHNAGIRI|MADURAI:MADURAI|NAMAKKAL:NAMAKKAL|NILGIRIS:NILGIRIS|PERAMBALUR:PERAMBALUR|PONDICHERRY:PONDICHERRY|SALEM:SALEM|THANJAVUR:THANJAVUR|THENI:THENI|THIRUVALLUR:THIRUVALLUR|THOOTHUKUDI:THOOTHUKUDI|TIRUNELVELI:TIRUNELVELI|VELLORE:VELLORE|VILLUPURAM:VILLUPURAM|VIRUDHUNAGAR:VIRUDHUNAGAR|";
    String [] tokens = str.split("\\|");

答案 2 :(得分:-2)

public static String[] splitWord(String x){
    String[] j = new String [200];
    for(int i=0;i<x.split("\|").length;i++){
        j[i] = x.split("\|")[i];
    }
    return j;
}

我为这些类型的情况想出了这种方法。 要使用它,请调用方法并指定您需要访问的单词:

Classname.splitWord(String)[word in array];