Java中split正向预查无法匹配最长数字序列的问题求解
解决Java字符串按多位数序号拆分的问题
你的代码里拆分逻辑的问题在于正则表达式(?=(\d+[、.]))会在每一个数字前触发拆分,哪怕这个数字是多位数的一部分(比如10里的1后面),所以才会把10拆成"1"和"0.haadfagada",11拆成"1"和"1.fsfdfare"。
修改方案
把拆分用的正则表达式改成(?=(?<!\\d)\\d+[、.]),这里的(?<!\\d)是负向零宽断言,作用是确保当前位置的前一个字符不是数字,这样就只会在独立的数字序号(比如8、9、10、11)的开头前拆分,不会破坏多位数的完整性。
修改后的完整代码
public static void main(String[] args) { String str = "8.adfafd9.abcdefg10.haadfagada11.fsfdfare"; String[] results = str.split("(?=(?<!\\d)\\d+[、.])"); for (int i=0; i<results.length; i++) { System.out.println("a[" + i + "] = \"" + results[i] + '"'); } }
运行结果
a[0] = "8.adfafd" a[1] = "9.abcdefg" a[2] = "10.haadfagada" a[3] = "11.fsfdfare"
内容的提问来源于stack exchange,提问作者travel
相关产品推荐
相关产品推荐

