【问题标题】:Split a String on | (pipe) in Java [duplicate]在 | 上拆分字符串Java中的(管道)[重复]
【发布时间】:2012-11-19 15:08:36
【问题描述】:

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

【问题讨论】:

  • split 采用正则表达式(正则表达式),因此,正如浩准所说,它是一个特殊字符。还有其他的,所以要小心!

标签: java regex string split


【解决方案1】:

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

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

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

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

【讨论】:

  • @user903772 你需要"\\|",因为`\`本身是String中的一个特殊符号,所以你必须转义它。
【解决方案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.) 每次检查 for 循环中的条件以及每次复制值时,都会拆分字符串。这是 2*n split 的电话,一个就足够了。 2.) 200 作为幻数是个坏主意,如果 x 有 201 个元素怎么办? 3.) 你为什么要复制结果数组? 4.) 为什么要手动复制它而不是使用System.arraycopy 或简单的.clone()
【解决方案3】:

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

试试下面:

    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("\\|");

【讨论】:

    猜你喜欢
    • 2011-10-04
    • 1970-01-01
    • 2017-07-22
    • 2017-12-10
    • 1970-01-01
    • 2012-10-16
    • 2014-02-26
    相关资源
    最近更新 更多