You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从文本文件中提取两个指定字符间的任意文本?

如何提取文本中任意两个)之间的内容?

嘿,我明白你遇到的问题了——固定位置的substring()截取在字段长度变化时完全不靠谱对吧?针对你这种用)作为分隔符的格式(比如number)street)city)state)country)),有几个简单又靠谱的方法,我给你拆解一下:

方法1:用String的split()方法(最直观易用)

因为你的文本是严格用)分隔各个字段的,直接把每行按)拆分就能得到所有字段,完全不用管每个字段的长度:

// 假设你已经读取到一行内容,比如:"123)Main Street)New York)NY)USA)"
String line = textscanner.nextLine();
// 注意:)是正则特殊字符,所以要转义成\\)
String[] fields = line.split("\\)");

// 拆分后fields数组会自动忽略末尾的空字符串(因为原行结尾是)),内容为:
// ["123", "Main Street", "New York", "NY", "USA"]
// 直接提取你需要的部分:
String number = fields[0];
String street = fields[1];
String country = fields[4]; // 对应最后一个有效字段

方法2:用正则表达式匹配(适配复杂格式)

如果你的文本偶尔有格式小问题(比如字段前后有空格、个别行多了分隔符),正则表达式会更灵活。我们可以直接匹配每一个)分隔的字段:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

// 正则规则:匹配任意非)的字符,直到遇到)
Pattern fieldPattern = Pattern.compile("([^)]+)\\)");
Matcher matcher = fieldPattern.matcher(line);

// 遍历所有匹配到的字段
while (matcher.find()) {
    // group(1)就是两个)之间(或开头到第一个))的内容
    String targetField = matcher.group(1).trim(); // 加trim去掉可能的空格
    System.out.println(targetField);
}

方法3:用Scanner直接读取字段(贴合你的现有代码)

既然你已经在使用Scanner读取文件,其实可以直接把Scanner的分隔符设为),这样就能跳过整行读取的步骤,直接获取每个字段:

Scanner textscanner = new Scanner(new File("your_file_path.txt"));
// 设置Scanner的分隔符为)(同样要转义)
textscanner.useDelimiter("\\)");

while (textscanner.hasNext()) {
    String field = textscanner.next().trim();
    // 跳过可能的空字段(比如行尾的)导致的空内容)
    if (!field.isEmpty()) {
        // 这里可以直接处理你需要的字段,比如判断是街道还是国家
        System.out.println(field);
    }
}
textscanner.close();

提醒一下:不管用哪种方法,)在正则表达式里是特殊字符,所以必须用\\)来表示实际的)字符哦。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:46:39