Java Scanner行为不正常?

时间:2013-11-22 04:59:22

标签: java string string-formatting java.util.scanner

我的项目中有以下代码片段:

 public void addText(String s){
    Scanner scan;
    int newInt = Integer.parseInt(s.substring(s.indexOf('\t') + 1 + 1));
    //find insertion point
    String temp = "";
    scan = new Scanner(text);
    int prev = 0;
    while(scan.hasNextInt() && newInt > scan.nextInt()){
        temp += text.substring(prev, text.indexOf('\n')) + "\r\n";
        prev = text.indexOf('\n') + 1;
    }
    text = temp + s + "\r\n" + text.substring(prev);
}

这样做的目的是在现有字符串中插入一个字符串,并将其保留在某个“数字顺序”中。

String s是一个格式化的字符串,看起来像"CityName\t\tSomeNumber"newInt的代码有效(通过调试确认)。什么不起作用是while循环。即使text中包含数据,scan.hasNextInt()也会失败。

例如,假设text = "Charlestown\t\t9"s = "Downville\t\t15"newInt循环被分配15. while循环应该迭代一次并结束,因为15 > 9(按照这些数字的升序组织城市)。但由于某种原因,Scanner每次都会在条件语句的scan.hasNextInt()部分返回false。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

hasNextInt的Javadoc说

  

如果此扫描仪输入中的下一个标记可以,则返回true   使用nextInt()解释为默认基数中的int值   方法。扫描仪不会超过任何输入。

这意味着如果您的下一个令牌是“Charlestown”,则返回false。在检查hasNextInt()之前,您必须从扫描仪中读取城镇的名称。