在Java中如何根据|(竖线)分割字符串

4
我有以下文本: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("|"),但我的数组由单个字符而不是每个地区组成。


1
split接受正则表达式作为参数,因此就像Haozhun所说的那样,它是一个特殊字符。还有其他一些特殊字符,所以要小心! - xagyg
3个回答

12

|是正则表达式中的特殊符号,使用\\|代替。

我将解释为什么要添加两个反斜杠。要转义|,需要\|。但是,要表示字符串\|,需要"\\|",因为字符串文字中的\本身需要转义。

而且,正如xagyg在评论中指出的那样,split将把参数视为正则表达式,而不是纯字符串。

在这种用例中,您可能会对了解Pattern.quote感兴趣。可以使用Pattern.quote("|")。这样,没有一个字符会被视为特殊字符。


@user903772 需要使用 "\\|",因为 \\ 本身是字符串中的特殊符号,所以必须进行转义。 - Haozhun

0

在编程中,如果要使用代表“或”的元字符|,需要在其前面使用转义字符。此外,由于需要将正则表达式作为字符串传递给split函数,因此还需要对转义字符进行转义。

可以尝试以下代码:

    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
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];

1
那是糟糕的代码,抱歉。1.) 在 for 循环中每次检查条件和复制值时都会拆分字符串。这是 2*n split 调用,其中一个就足够了。2.) 200 作为魔数是个坏主意,如果 x 有 201 个元素怎么办?3.) 无论如何你为什么要 复制 结果数组呢?4.) 为什么要手动复制它而不是使用类似于 System.arraycopy 或简单的 .clone() 的东西。 - Joachim Sauer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接