3

我有一个案例,我需要根据一个标准将一个字符串解析为几个组

例如下面的;

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

基本上,我不需要关心字母或数字是第一位的。问题是将表达式分组为自己的,可以是 0 次或更多次。意思如下

01%3A%35r%07%01P%88%00

还应该产生一组%3A%35r%07%01P%88%00

4

3 回答 3

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));

输出: -

[%3A%35r%07%01P%88%00, WAP_GPRS]
于 2012-10-18T12:23:01.387 回答
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
}

删除原始字符串的前两个字母是另一件与组分离无关的事情,您可以使用 substring 方法来完成。

于 2012-10-18T12:30:09.667 回答
1

所以我想你需要一个拆分的正则表达式模拟。这将需要一个重复的捕获组。

坏消息,有些人研究了类似的问题并没有找到正确的答案: https ://stackoverflow.com/a/6836024/1665128

好消息,如果您可以对组的数量进行合理的限制,并且可以添加一些代码来识别空的尾随,这可能会有所帮助:

([^;]*);?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?
于 2012-10-18T12:54:31.317 回答