Java Scanner类中的next()与nextLIne()
我在读一个数字,然后是一个字符串,然后比较字符串。 这很好:Java Scanner类中的next()与nextLIne(),java,Java,我在读一个数字,然后是一个字符串,然后比较字符串。 这很好: int num = sc.nextInt(); String S = sc.next(); if (S.equals("TEST")){ //do something } 在进行i/p say 5测试时,程序进入if部分 但是如果我用.nextLine()代替 int num = sc.nextInt(); String S = sc.nextLine(); if (S
int num = sc.nextInt();
String S = sc.next();
if (S.equals("TEST")){
//do something
}
在进行i/p say 5测试时,程序进入if部分
但是如果我用.nextLine()代替
int num = sc.nextInt();
String S = sc.nextLine();
if (S.equals("TEST")){
//do something
}
它不起作用。对于相同的输入(5个测试),它不会执行if部分
我知道.next()一直读到第一个空格,.nextLine()一直读到遇到“\n”为止。在这里,它们都返回相同的字符串,那么这里出了什么问题
编辑:发现.nextLine()正在读取字符串和前面的空格。为什么?.nextInt()函数是否将光标返回到遇到分隔符之前的点?很简单:
next()
使用分隔符模式返回下一个标记,默认情况下,该模式匹配空格(因此空格被消除,因为它们是分隔符),而不是nextLine()
从当前光标位置读取到行的末尾。是否尝试打印出S
以查看实际值?@DanW yes,.nextLine()给出可能相关的“S”(与前面的空格一起):简言之,next()
返回下一个不带分隔符的标记,默认情况下是一个或多个空格(\\S+
),而nextLine()
不关心为扫描仪设置的分隔符,它将其视为仅限分隔符的行分隔符,因此,\u TEST
之前的空格是非分隔符,因此它被包含在结果中。通过阅读javadoc for Scanner可以回答“编辑”中的问题。