【问题标题】:Is ',' not a valid delimiter in Java?',' 不是 Java 中的有效分隔符吗?
【发布时间】:2021-11-04 08:53:08
【问题描述】:

我有一个坐标以 x,y 形式存储为字符串,我需要打印它们,所以我将扫描仪的分隔符更改为“,”。当我这样做时,我得到以下结果:

字符串被正确插入,并且 x 坐标也被读取。这里出了什么问题? 代码:

Coordinate addCoordinate(String coordinateString) {
        System.out.print(coordinateString);
        Scanner in = new Scanner(coordinateString);
        Coordinate coordinate = new Coordinate();
        in.useDelimiter(",");
        coordinate.x = in.nextInt();
        System.out.print(coordinate.x);
        coordinate.y = in.nextInt();
        System.out.print(coordinate.y);
        return coordinate;
    }

【问题讨论】:

  • 问题是分隔符模式需要匹配所有分隔符。当您将其设置为 "," 时,它将仅匹配一个逗号作为分隔符。空白字符(空格、换行符等)将被视为令牌的一部分。这将导致nextInt 吐...由于数字开头或结尾的多余空格。我的建议:仔细阅读 Scanner 的 javadocs。
  • 糟糕...已修复。
  • 但是如果字符串是 "2,6\n" 或 "2,6 "(6 之后的换行符或空格)并且因为使用 print(coordinateString) 而不是println,我们在输出中看到的换行必须来自字符串

标签: java coordinates delimiter comma


【解决方案1】:

正如@user16320675 在他的评论中提到的那样,对于"2,6\n" 或"2,6 " 这样的字符串,分隔符将无法正常工作。

您可以从删除 coordinateString 中包含的前导和尾随空格开始:

Coordinate addCoordinate(String coordinateString) {
  coordinateString = coordinateString.trim();
  ...

或者使用另一个与逗号或任何空白字符匹配的分隔符:

in.useDelimiter(",|\\s*");

【讨论】:

    【解决方案2】:

    使用额外的扫描仪完成了这项工作。

    Coordinate readCoordinate(Scanner in) {         
        Coordinate coordinate = new Coordinate();
        String coordinateString = in.next();        
        Scanner stringScanner = new Scanner(coordinateString);          
        stringScanner.useDelimiter(",");        
        coordinate.x = stringScanner.nextInt();         
        coordinate.y = stringScanner.nextInt();         
        return coordinate;
    }
    

    【讨论】:

    • 这不是答案
    • Coordinate readCoordinate(Scanner in) { Coordinate coordinate = new Coordinate(); String coordinateString = in.next(); Scanner stringScanner = new Scanner(coordinateString); stringScanner.useDelimiter(","); coordinate.x = stringScanner.nextInt(); coordinate.y = stringScanner.nextInt(); return coordinate; }
    猜你喜欢
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 2011-10-06
    • 2011-03-07
    • 1970-01-01
    相关资源
    最近更新 更多