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

Java中逗号','是否为Scanner合法分隔符?读取x,y格式坐标报错排查

问题原因

  • 当你手动为Scanner设置分隔符为仅,后,Scanner会废弃默认的空白分隔规则,不会再自动忽略逗号前后的空格、制表符、换行符等内容。如果你的输入坐标中逗号后带有空格,或者坐标字符串末尾存在非数字字符,第二个nextInt()就无法匹配到合法整数,直接抛出找不到元素的异常。
  • useDelimiter方法接收的是正则表达式参数,你当前仅传入,,意味着只有单独的逗号会被识别为分隔符,只要分隔位置存在其他额外字符就会导致token拆分不符合预期。

修复方案

方案1:调整分隔符规则

修改分隔符的正则表达式,兼容逗号前后的空白字符即可:

Coordinate addCoordinate(String coordinateString) {
    System.out.print(coordinateString);
    Scanner in = new Scanner(coordinateString);
    Coordinate coordinate = new Coordinate();
    // 分隔符规则:逗号 + 任意数量的空白字符,适配带空格的输入格式
    in.useDelimiter(",\\s*");
    coordinate.x = in.nextInt();
    System.out.print(coordinate.x);
    coordinate.y = in.nextInt();
    System.out.print(coordinate.y);
    return coordinate;
}

方案2:直接拆分字符串(更稳妥)

不需要依赖Scanner的分隔规则,直接拆分字符串转换,逻辑更清晰故障率更低:

Coordinate addCoordinate(String coordinateString) {
    String[] coordParts = coordinateString.split(",");
    Coordinate coordinate = new Coordinate();
    // trim()可以消除字符串前后的空白字符,避免空格影响转换
    coordinate.x = Integer.parseInt(coordParts[0].trim());
    coordinate.y = Integer.parseInt(coordParts[1].trim());
    System.out.print(coordinate.x);
    System.out.print(coordinate.y);
    return coordinate;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:06:03