我的项目中有以下代码片段:
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。
有什么建议吗?
答案 0 :(得分:0)
hasNextInt
的Javadoc说
如果此扫描仪输入中的下一个标记可以,则返回true 使用nextInt()解释为默认基数中的int值 方法。扫描仪不会超过任何输入。
这意味着如果您的下一个令牌是“Charlestown”,则返回false。在检查hasNextInt()
之前,您必须从扫描仪中读取城镇的名称。