如何从文本文件中提取两个指定字符间的任意文本?
如何提取文本中任意两个)之间的内容?
嘿,我明白你遇到的问题了——固定位置的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
相关产品推荐
相关产品推荐

