You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java中不使用正则、Jsoup等工具提取字符串中[]内内容的方法

不用正则/第三方工具提取方括号内内容的实现方案

当然可以搞定!不用正则表达式或者jsoup这类工具,咱们靠字符串的基础操作就能完成这个需求,而且对于60万+条数据的场景,基础方法的性能表现也很可靠。

核心思路

每条目标字符串的格式都是[数字]: 其他内容,咱们只需要定位到方括号的位置,然后截取中间的内容就行,具体步骤是:

  • 找到字符串中第一个[的索引位置
  • 从这个位置往后找第一个]的索引位置
  • 如果两个索引都有效(不是-1),就截取这两个索引之间的内容(注意要跳过[本身,所以起始索引要+1)

代码示例(以Java为例,其他语言逻辑一致)

// 单条字符串处理方法
public static String getBracketContent(String line) {
    // 定位左方括号
    int leftBracket = line.indexOf('[');
    // 从左括号之后定位右方括号
    int rightBracket = line.indexOf(']', leftBracket + 1);
    
    // 校验是否找到有效的括号对
    if (leftBracket != -1 && rightBracket != -1) {
        return line.substring(leftBracket + 1, rightBracket);
    }
    // 处理格式异常的情况,这里返回空字符串,你也可以根据需求返回原字符串或者其他标记
    return "";
}

// 批量处理示例
public static List<String> batchExtract(List<String> inputLines) {
    List<String> result = new ArrayList<>(inputLines.size());
    for (String line : inputLines) {
        result.add(getBracketContent(line));
    }
    return result;
}

注意事项

  1. 异常处理:如果遇到不符合格式的字符串(比如没有方括号、只有单边括号),上面的方法会返回空字符串,你可以根据实际需求调整这部分逻辑,比如跳过这条数据或者保留原字符串
  2. 性能优化:处理60万条数据时,尽量避免在循环里做不必要的对象创建,比如用ArrayList预先指定容量(像示例里那样),能提升一点效率
  3. 其他语言适配:不管是Python、JavaScript还是C#,核心逻辑都是一样的——用indexOf(或对应语言的查找方法)定位括号,再截取子串。比如Python的写法大概是:
def get_bracket_content(line):
    left = line.find('[')
    right = line.find(']', left + 1)
    if left != -1 and right != -1:
        return line[left+1:right]
    return ""

内容的提问来源于stack exchange,提问作者Aggelos Kypraios

火山引擎 最新活动