我正在从服务器中提取一个字符串,它在字段之间有分隔符,我们只想说" \ u0003",我想在第31个分隔符之后/之后将字符串拆分为2个单独的字符串。这样的事情可能吗?如果是的话,怎么样?
答案 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之间。
注意:我已经对此进行了测试,并且按预期工作。