使用Scanner.next()获取指定n个字符时遇InputMismatchException求助
解决Scanner解析固定长度含空白字符时的InputMismatchException问题
首先,你遇到的InputMismatchException核心原因是Scanner的next(Pattern)方法会自动跳过默认分隔符(空白类字符),且仅匹配连续的"token"序列,这和你想要获取包含空白的固定长度字符段的需求完全冲突。另外,如果输入剩余字符长度不足pattern要求的长度,也会触发这个异常。
下面给你两种实用的解决方案:
方案1:直接用String的substring方法(最简洁高效)
既然需求是按固定字符数分割,直接操作字符串是最不容易出错的方式:
String input = "21 SPAN 1101"; // 假设输入总长度符合你的分段要求 // 按索引截取,注意是左闭右开的区间规则 String segment1 = input.substring(0, 4); // 取前4个字符 String segment2 = input.substring(4, 10); // 从第4位开始取6个字符(4到10共6位) String segment3 = input.substring(10, 15); // 从第10位开始取5个字符 String segment4 = input.substring(15); // 取剩余的最后4个字符 // 验证输出 System.out.println("Segment 1: '" + segment1 + "'"); System.out.println("Segment 2: '" + segment2 + "'"); System.out.println("Segment 3: '" + segment3 + "'"); System.out.println("Segment 4: '" + segment4 + "'");
小提示:使用
substring前最好先检查输入字符串的总长度是否满足截取需求,避免抛出IndexOutOfBoundsException。
方案2:用Scanner的findInLine方法(保留Scanner操作逻辑)
如果一定要基于Scanner实现,可以用findInLine(Pattern)方法,它不会自动跳过分隔符,会从当前扫描位置开始严格匹配指定模式:
import java.util.Scanner; import java.util.regex.Pattern; public class ScannerFixedLengthParser { public static void main(String[] args) { String input = "21 SPAN 1101"; Scanner scanner = new Scanner(input); // 定义固定长度的匹配模式,点号默认不匹配换行,需要的话可加Pattern.DOTALL参数 Pattern len4 = Pattern.compile(".{4}"); Pattern len6 = Pattern.compile(".{6}"); Pattern len5 = Pattern.compile(".{5}"); String segment1 = scanner.findInLine(len4); String segment2 = scanner.findInLine(len6); String segment3 = scanner.findInLine(len5); String segment4 = scanner.findInLine(len4); // 验证输出 System.out.println("Segment 1: '" + segment1 + "'"); System.out.println("Segment 2: '" + segment2 + "'"); System.out.println("Segment 3: '" + segment3 + "'"); System.out.println("Segment 4: '" + segment4 + "'"); scanner.close(); } }
再说说为什么原来的next(Pattern)会报错
- Scanner默认把空白作为分隔符,调用
next()系列方法时,会先跳过所有空白字符,再尝试匹配模式,这直接导致你无法获取包含开头空白的字符段。 - 如果输入剩余的字符长度不够pattern要求的长度,Scanner找不到符合要求的序列,就会抛出
InputMismatchException。
内容的提问来源于stack exchange,提问作者Appius
相关产品推荐
相关产品推荐

