Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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_Regex_Delimiter - Fatal编程技术网

使用Java模式的字符串分隔符

使用Java模式的字符串分隔符,java,regex,delimiter,Java,Regex,Delimiter,我有一个字符串,我想用Java模式来划分它。第一行后面还有一个回车符。分隔符为| MSH|^~\&|Unicare^HL7CISINV10.00.16^L||IBA||||ADT^A03|3203343722|P|2.3.1||||| EVN|A03 我使用了以下代码 Pattern pattern = Pattern.compile("([^|]++)*"); Matcher matcher = pattern.matcher(str); while (matcher.find())

我有一个字符串,我想用Java模式来划分它。第一行后面还有一个回车符。分隔符为|

MSH|^~\&|Unicare^HL7CISINV10.00.16^L||IBA||||ADT^A03|3203343722|P|2.3.1|||||
EVN|A03
我使用了以下代码

Pattern pattern = Pattern.compile("([^|]++)*");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
   System.out.println("Result: \"" + matcher.group() + "\"");
}
这样做基本上会为每个分隔符字符显示空字符。我想发现忽略这些。修改正则表达式以便忽略字符的任何机会

提前感谢。

我相信
String#split()
更适合您的需要:

String src = "MSH|^~\\&|Unicare^HL7CISINV10.00.16^L||IBA||||ADT^A03|3203343722|P|2.3.1|||||\r\nEVN|A03\r";;
String[] ss = src.split("\\|+");
for (String s : ss) {
    System.out.println(s);
}
输出:

MSH
^~\&
Unicare^HL7CISINV10.00.16^L
IBA
ADT^A03
3203343722
P
2.3.1
                                 <--- there is a \r\n in the string at this point
EVN
A03
输出(两者完全相同):

Split.:“MSH”
拆分..:“^~\&”
拆分..:“Unicare ^hl7cisenv10.00.16 ^L”
拆分..:“IBA”
拆分..:“ADT^A03”
拆分..:“3203343722”
分裂…“P”
拆分..:“2.3.1”
拆分..“
EVN“
拆分..:“A03
"
模式:“MSH”
模式:“^~\&”
模式:“Unicare ^hl7cisenv10.00.16 ^L”
模式:“IBA”
模式:“ADT^A03”
图案:“3203343722”
图案:“P”
模式:“2.3.1”
图案:“
EVN“
图案:“A03
"
我认为
String#split()
更适合您的需要:

String src = "MSH|^~\\&|Unicare^HL7CISINV10.00.16^L||IBA||||ADT^A03|3203343722|P|2.3.1|||||\r\nEVN|A03\r";;
String[] ss = src.split("\\|+");
for (String s : ss) {
    System.out.println(s);
}
输出:

MSH
^~\&
Unicare^HL7CISINV10.00.16^L
IBA
ADT^A03
3203343722
P
2.3.1
                                 <--- there is a \r\n in the string at this point
EVN
A03
输出(两者完全相同):

Split.:“MSH”
拆分..:“^~\&”
拆分..:“Unicare ^hl7cisenv10.00.16 ^L”
拆分..:“IBA”
拆分..:“ADT^A03”
拆分..:“3203343722”
分裂…“P”
拆分..:“2.3.1”
拆分..“
EVN“
拆分..:“A03
"
模式:“MSH”
模式:“^~\&”
模式:“Unicare ^hl7cisenv10.00.16 ^L”
模式:“IBA”
模式:“ADT^A03”
图案:“3203343722”
图案:“P”
模式:“2.3.1”
图案:“
EVN“
图案:“A03
"

我不明白你为什么在已经为它编写了代码的情况下不尝试它?选中了,但不起作用。上面忘了提了。啊,对不起。我建议您阅读这篇文章:什么是“我想划界”?您的预期输出应该是什么样的?如果您将正则表达式从
([^ |]++)*
更改为
[^ |]+
,是否有帮助?我不明白您为什么在编写代码时不尝试它?已选中,但不起作用。上面忘了提了。啊,对不起。我建议您阅读这篇文章:什么是“我想划界”?您的预期输出应该是什么样的?如果您将正则表达式从
([^ |]++)*
更改为
[^ |]+
,是否有帮助?非常好。我想使用模式,但我也可以使用拆分。让拆分模式匹配多个
字符真的明智吗?
|
不能指示空字段吗?!?杰出的我想使用模式,但我也可以使用拆分。让拆分模式匹配多个
字符真的明智吗?
|
不能指示空字段吗?!?