我有以下数据:
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);
没有提供所需的结果。
答案 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.compile
或Pattern.quote
。
要查看compile
和quote
的实际操作,以下是使用这三种方法的示例:
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("||"));
,其中
答案 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年