首页 > 解决方案 > 在 Java 中有效地拆分大字符串

问题描述

我有一个大字符串,如果它前面没有另一个特定字符,应该在某个字符处拆分。

这样做是最有效的方法吗?

示例:在 ':' 处拆分此字符串,但不在 "?:" 处拆分:

part1:part2:https?:example.com:anotherstring

到目前为止我已经尝试过:

  1. 正则表达式(?<!\?):。非常慢。

  2. 首先获取拆分字符串的索引,然后拆分它。仅当字符串中的拆分字符不多时才有效。

  3. 逐个字符迭代字符串。如果没有很多保护字符(例如“?”),则有效。

标签: javastringsplit

解决方案


我担心您必须检查字符串并检查“:”前面是否有“?”

int lastIndex=0;
for(int index=string.indexOf(":"); index >= 0; index=string.indexOf(":", lastIndex)){
    if(index == 0 || string.charAt(index-1) != '?'){
        String splitString = string.subString(lastIndex, index);
        // add splitString to list or array
        lastIndex = index+1;
    }
}
// add string.subString(lastIndex) to list or array

推荐阅读