string.split方法中的字符串分隔符

时间:2011-08-11 05:10:10

标签: java string split delimiter

我有以下数据:

1||1||Abdul-Jabbar||Karim||1996||1974

我想划分令牌。

此处的分隔符为"||"

我的分隔符设置器是:

public void setDelimiter(String delimiter) {
    char[] c = delimiter.toCharArray();
    this.delimiter = "\"" + "\\" + c[0] + "\\" + c[1] + "\"";
    System.out.println("Delimiter string is: " + this.delimiter);
}

然而,

String[] tokens = line.split(delimiter);

没有提供所需的结果。

10 个答案:

答案 0 :(得分:54)

没有必要像你所做的那样将它分解成碎片来设置分隔符。

这是一个可以编译和运行的完整程序:

import java.util.Arrays;
public class SplitExample {
    public static final String PLAYER = "1||1||Abdul-Jabbar||Karim||1996||1974";
    public static void main(String[] args) {
        String[] data = PLAYER.split("\\|\\|");
        System.out.println(Arrays.toString(data));
    }
}

如果您想使用模式拆分,可以使用Pattern.compilePattern.quote

要查看compilequote的实际操作,以下是使用这三种方法的示例:

import java.util.Arrays;
import java.util.regex.Pattern;
public class SplitExample {
    public static final String PLAYER = "1||1||Abdul-Jabbar||Karim||1996||1974";
    public static void main(String[] args) {
        String[] data = PLAYER.split("\\|\\|");
        System.out.println(Arrays.toString(data));

        Pattern pattern = Pattern.compile("\\|\\|");
        data = pattern.split(PLAYER);
        System.out.println(Arrays.toString(data));

        pattern = Pattern.compile(Pattern.quote("||"));
        data = pattern.split(PLAYER);
        System.out.println(Arrays.toString(data));
    }
}

如果您要使用相同的模式经常拆分,建议使用模式。 BTW的输出是:

[1, 1, Abdul-Jabbar, Karim, 1996, 1974]
[1, 1, Abdul-Jabbar, Karim, 1996, 1974]
[1, 1, Abdul-Jabbar, Karim, 1996, 1974]

答案 1 :(得分:33)

使用Pattern#quote()方法转义||。尝试:

final String[] tokens = myString.split(Pattern.quote("||"));

这是必需的,因为|alternation字符,因此在传递给split调用时会获得特殊含义(基本上split的参数是正则表达式字符串形式)。

答案 2 :(得分:8)

双引号在正则表达式中被解释为文字;他们不是特殊的人物。您正在尝试匹配文字"||"

只需使用Pattern.quote(delimiter)

根据要求,这里有一行代码(与Sanjay相同)

final String[] tokens = line.split(Pattern.quote(delimiter));

如果这不起作用,则表示您没有传递正确的分隔符。

答案 3 :(得分:6)

String[] strArray= str.split(Pattern.quote("||"));

,其中

  1. str =" 1 || 1 || Abdul-Jabbar || Karim || 1996 || 1974&#34 ;;
  2. Pattern.quote(" ||")将忽略特殊字符。
  3. .split函数会在每次出现||。
  4. 时拆分字符串
  5. strArray将包含由||。
  6. 分隔的字符串数组

答案 4 :(得分:5)

管道(|)是正则表达式中的特殊字符。为了逃避它,你需要用反斜杠(\)作为前缀。但在java中,反斜杠也是一个转义字符。所以你需要用另一个反斜杠来逃避它。所以你的正则表达式应该是\\|\\| 例如, String[] tokens = myString.split("\\|\\|");

答案 5 :(得分:2)

Split使用正则表达式,管道字符|在正则表达式中具有特殊含义,因此您需要将其转义。有几种方法可以做到这一点,但这里最简单:

String[] tokens = line.split("\\|\\|");

答案 6 :(得分:0)

setDelimiter()功能有问题。你不想双重引用分隔符,是吗?

public void setDelimiter(String delimiter) {
    char[] c = delimiter.toCharArray();
    this.delimiter = "\\" + c[0] + "\\" + c[1];
    System.out.println("Delimiter string is: " + this.delimiter);
}

但是,正如其他用户所说,如果您的要求允许,最好使用Pattern.quote()方法来转义分隔符。

答案 7 :(得分:0)

问题是因为您要在分隔符中添加引号。它应该删除,它将正常工作。

public void setDelimiter(String delimiter) {
    char[] c = delimiter.toCharArray();
    this.delimiter = "\\" + c[0] + "\\" + c[1];
    System.out.println("Delimiter string is: " + this.delimiter);
}

答案 8 :(得分:0)

String[] splitArray = subjectString.split("\\|\\|");

您使用的功能:

public String[] stringSplit(String string){

    String[] splitArray = string.split("\\|\\|");
    return splitArray;
}

答案 9 :(得分:0)

StringTokenizer st = new StringTokenizer("1||1||Abdul-Jabbar||Karim||1996||1974",
             "||");
while(st.hasMoreTokens()){
     System.out.println(st.nextElement());
}

答案将打印

  

1 1 Abdul-Jabbar Karim 1996年1974年