如何在Java中特定分隔符的第n次出现时拆分字符串

时间:2015-01-06 16:45:56

标签: java android string parsing divider

我正在从服务器中提取一个字符串,它在字段之间有分隔符,我们只想说" \ u0003",我想在第31个分隔符之后/之后将字符串拆分为2个单独的字符串。这样的事情可能吗?如果是的话,怎么样?

1 个答案:

答案 0 :(得分:2)

您可以这样做:

Pattern pat = Pattern.compile("((?:[^\u0003]*\u0003){30}[^\u0003]*)\u0003(.*)");
Matcher matcher = pat.matcher(input);
if (matcher.matches()) {
    String leftPart = matcher.group(1);
    String rightPart = matcher.group(2);
}

模式的工作原理如下:第一个捕获组找到一个子串,其中包含30个出现的分隔符\u0003;找到没有分隔符的子字符串,后跟一个分隔符的子模式重复30次,然后是另一个没有分隔符的子字符串。必须跟一个分隔符(第31个分隔符),第二个捕获组包含字符串中剩下的所有内容。 (请注意,以(?:开头的带括号的子模式是非捕获组,不计入group()方法使用的编号。)

另一种方法是使用split()方法。但是,这将要求您自己重建左侧部分,方法是连接结果数组的前31个元素(首先检查实际上是否存在多个元素),然后插入分隔符。不幸的是,由于您使用的是Android,因此您无法使用String.join()方法来帮助解决这个问题,因为这是在Java 8中添加的,而Android仍然停留在Java 6和Java 7之间。

注意:我已经对此进行了测试,并且按预期工作。