Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中使用指定的分隔符分割字符串,同时忽略/?_Java_Arrays_Regex_String_Split - Fatal编程技术网

如何在java中使用指定的分隔符分割字符串,同时忽略/?

如何在java中使用指定的分隔符分割字符串,同时忽略/?,java,arrays,regex,string,split,Java,Arrays,Regex,String,Split,我试着读关于regex和逃跑的书,但没有成功 我有一个字符串如下所示: String s = "4/18/2015|Planned|Linux|Maintenance"; tokens[0] is null tokens[1] is 4 tokens[2] is / and tokens[3] is 1 我想用分隔符“|”分割它: String[] tokens = s.split("|"); 我期望的正确结果是 tokens[0] is "4/18/2015", tokens[1] i

我试着读关于regex和逃跑的书,但没有成功

我有一个字符串如下所示:

String s = "4/18/2015|Planned|Linux|Maintenance";
tokens[0] is null
tokens[1] is 4
tokens[2] is /
and tokens[3] is 1
我想用分隔符“|”分割它:

String[] tokens = s.split("|");
我期望的正确结果是

tokens[0] is "4/18/2015", 
tokens[1] is "Planned", 
tokens[2] is "Linux", 
token[3] is "Maintenance", 
但它给了我一些奇怪的结果,比如:

String s = "4/18/2015|Planned|Linux|Maintenance";
tokens[0] is null
tokens[1] is 4
tokens[2] is /
and tokens[3] is 1
我猜这是因为日期中的斜杠“/”,这就是原因。我试图搜索许多现有的问题,也尝试了建议的方法,但没有结果。

只需使用

split("\\x7C")


在对管道字符“|”进行拆分时,需要转义或使用相应的unicode值。

转义管道字符:

s.split("\\|");
因为正则表达式中的管道符号表示OR,所以要转义它,您需要
\\\\\
,但在正则表达式中,您也需要转义
\
,所以
\\\\\
将起作用

或者正如mushfek0001所建议的:

split("\\x7C")

大多数正则方言中的管道是交替的元字符;基本上,您要求正则表达式引擎在这里做的是:“根据空字符串或……空字符串进行拆分”

而且,嗯,这意味着你每次都有可能变空,除了正则表达式引擎不是傻瓜,如果在拆分中检测到空匹配,引擎将在再次拆分之前前进一个字符。。。因此您的结果(不确定为什么第一个元素是
null
,而不是空字符串)

因此,您应该根据
“\\\\\”
进行拆分,而不是根据
“\\\\”
进行拆分

此外,如果重复执行此操作,请使用
模式

private static final Pattern PIPE = Pattern.compile("\\|");

// ...

final String[] tokens = PIPE.split(yourInput);

什么是“奇怪的结果”?
请帮助我,我将投票选出正确的答案并接受最好的答案这是很明显的,也是意料之中的:)看看这个,我尝试了你之前的建议拆分(“\\\\\”),它成功了。我需要接受你的回答,但它不允许我这么做,它有10分钟的限制。稍后我会接受你的回答。你所谓的“十六进制码”是unicode码点;请注意,这仅在Java7之后才可用!谢谢你的信息员。做了编辑。这是一些很好的信息!!!!!!!!!谢谢你!这很有帮助!我本应该接受你的建议的,但是mushfek0001早就来解决我的问题了。非常感谢你,因为我对你的答案投了赞成票。