答案 0 :(得分:5)
尝试改变这一点:
value.split("|");
要:
value.split("\\|");
如果你想要包含那些尾随空字符串,你需要使用String.split(String regex,int limit)和第二个参数(limit)的负值,如下所示:
value.split("\\|",-1);
答案 1 :(得分:3)
这是因为Java的split
方法接受Regex作为参数,与.NET中的对应方不同。
如果您不知道Regex是什么,请告诉您,|
在Regex中有特殊含义。它并不意味着通常的|
文字,而是意味着每个角色或类似的东西。 (我什么都不知道,不相信我。使用搜索引擎获取有关Regex中的含义的更准确信息)
但是,你如何告诉Java不要将某些东西视为特殊角色?使用反斜杠!那你如何告诉Regex不要把某些东西视为一个特殊的角色呢?使用双反斜杠!为什么?因为Java字符串中的反斜杠也是一个特殊字符。
简而言之,你需要在正则表达式中转义|
,所以正则表达式是这样的:
\|
但是,Java字符串中不允许\
作为文字,所以也要逃避!你最终得到了
\\|
整件事是
split("\\|");
相当违反直觉,是吗?
答案 2 :(得分:2)
你需要逃避|
try with \\|
示例
String test="www.facebook.com|hello";
System.out.println(test.split("\\|").length);
输出 2
答案 3 :(得分:2)
运算符|
是一个特殊字符,因此我们需要将其转义。
很少有特殊运营商
\.[]{}()*+-?^$|
尝试使用dole斜杠转义,"\\|"
- > .split("\\|");
答案 4 :(得分:1)
这是因为Java split()
将regex
作为第一个参数而不是String
...因此|
被解释为OR,所以你要问的是要做的是用""
或""
分割字符串,以及为什么你得到每个字符(以及开头的空字符)
(我有点迟了......但Abdelhak的回答应该有效)
答案 5 :(得分:0)
Java Regular Expressions API是更好的方法,而不是拆分和替换。 String.split()和String.replace()方法在内部使用正则表达式apis本身, 这可能会导致您的应用程序出现性能问题。 请注意,调用String.split()会创建并编译一个新的Pattern对象。 这同样适用于String.replace()方法。 如果在紧密循环中调用split()或replace()函数,则每次编译模式都会导致程序出现性能问题。