如何用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
相关产品推荐
相关产品推荐

