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

如何用Java Scanner提取TXT文件中字符串与整数,跳过特殊符号?

问题解决方案

基础认知说明

  • Java 的 Scanner 类没有提供 nextString() 方法,next() 的默认行为就是读取下一个由空白符分割的非空令牌,返回值为字符串类型。只要你需要提取的目标字符串本身不包含空格,直接用 next() 完全可以满足需求,不需要额外方法。
  • Scanner 默认以任意连续空白(空格、制表符、换行符等)作为令牌分隔符,你示例行里的 7.、SSWAB、38、15、-、57 是6个独立的令牌。
  • nextInt() 只会匹配符合整数格式的令牌,遇到 - 这种非整数字符串令牌时会直接跳过,继续向后查找符合要求的整数,这就是你之前直接读到57的原因。

修正后的代码实现

你只需要在读取完第二个整数后,加一行代码读取并丢弃中间的 - 令牌即可,完整写法如下:

scanner.next(); // 读取并丢弃行首的序号令牌(如"7.")
String s = scanner.next(); // 读取目标字符串,返回值本身就是String无需强转
Integer n1 = scanner.nextInt(); // 读取第一个整数38
Integer n2 = scanner.nextInt(); // 读取第二个整数15
scanner.next(); // 读取并丢弃中间的"-"令牌
Integer n3 = scanner.nextInt(); // 正确读取第三个整数57

扩展说明

如果后续你需要提取的字符串本身包含空格,就不能用默认的 next() 读取,可以选择两种方案:

  • 调整 Scanner 的分隔符规则,自定义非空格的分隔符
  • 调用 scanner.nextLine() 读取整行内容后,用正则表达式匹配提取所有需要的字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:48:04