我有一个案例,我需要根据标准将字符串解析成几个组
例如以下内容;
01%3A%35r%07%01P%88%00;WAP_GPRS
应该是2组
%3A%35r%07%01P%88%00
WAP_GPRS
请注意,我在开始时并不关心01,并且可以有0个或更多个子字符串;我需要他们所有人在他们自己的小组。
另一个;
01%3A%35r%07%01P%88%00;KPN;A23B
应该是3组:
%3A%35r%07%01P%88%00
KPN
A23B
基本上,我不需要关心alpha或数字是否优先。问题是将表达式分组为自己的表达式,可以是0次或更多次。含义如下
01%3A%35r%07%01P%88%00
还应该生成一组%3A%35r%07%01P%88%00
答案 0 :(得分:2)
为什么不只是split
;
上的字符串01
。
但在此之前,您需要使用%
在第一个String#substring
之前移除required
,因为您没有在 String str = "01%3A%35r%07%01P%88%00;WAP_GPRS";
// Remove `01` before first `%`
str = str.replace(str.substring(0, str.indexOf("%")), "");
String[] groups = str.split(";");
System.out.println(Arrays.toString(groups));
输出中显示: - < / p>
[%3A%35r%07%01P%88%00, WAP_GPRS]
输出: -
{{1}}
答案 1 :(得分:2)
您不需要正则表达式:
String data = "01%3A%35r%07%01P%88%00;KPN;A23B"
String groups = s.split(";")
for (String s: groups ){
System.out.println(s); // I'm printing each separate group
}
删除原始字符串的前两个字母是另一个与组分隔无关的事情,您可以使用子字符串方法来完成。
答案 2 :(得分:1)
所以我猜你需要一个正则表达式的分裂模拟。这需要重复捕获组。
坏消息,有些人已经研究过类似的问题而没有找到正确的答案: https://stackoverflow.com/a/6836024/1665128
好消息是,如果您可以对组的数量有一些合理的限制,并且您可以添加一些代码来识别空的尾随,这可能会有所帮助:
([^;]*);?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?