java中的Length方法,在输入字符串上使用时不会产生预期的结果
我的初始代码未产生预期结果:java中的Length方法,在输入字符串上使用时不会产生预期的结果,java,string,java.util.scanner,Java,String,Java.util.scanner,我的初始代码未产生预期结果: import java.util.Scanner; class Strings { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Enter your word: "); String word1 = sc.next(); System.out.print
import java.util.Scanner;
class Strings {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter your word: ");
String word1 = sc.next();
System.out.println(word1.length());
sc.close();
}
}
输出:
tk@localhost:~$ java Strings
Enter your word:
avada kedavra
5
这不是我绳子的长度。
但当我尝试此操作时(没有用户输入):
输出:
tk@localhost:~$ java Strings
13
它起作用了!
那么,当我从用户那里获取输入时,为什么它不起作用呢?我缺少什么?默认情况下,查找并返回下一个完整的令牌。默认情况下,标记是一个单词,用空格或换行符(\p{javaWhitespace}+
)分隔
因此,在第一个示例中,word1=“avada”
,长度为5
使用sc.nextLine()获取完整的行。简而言之:
单击延迟的时间稍微长一点:扫描仪在调用next
时返回“next token”,代币是通过采用一种模式计算的,默认情况下为“所有空白”。因此,调用next返回下一个单词,而不是预期的完整行
在实例化
扫描仪时设置一个装配模式
或调用nextLine
。下一个单词是avada。使用sc.nextLine()
谢谢。成功了!java scanner的next()
方法使用空格作为分隔符。这意味着每当它找到一个,你正在读的字符串就到此结束。按照Eran说的做,如果所有内容都在一行中,则使用nextLine()
(小心,如果有新行,则必须使用与现有行相同的nextLine()
,否则会出现同样的问题)记录在案:尽管你的问题以dup结尾,但别忘了在某个时候接受其中一个答案。我发现你的问题写得很好,而且“足够好”可以留下来。我看不出与其他答案有什么区别…@Derlin在时间上有重叠。当我开始写作时,没有答案,我只是需要更长的时间,因为我必须获得指向javadoc的链接。我理解^^^^^要完整,它默认使用,\p{javaWhitespace}+
。如果我们不想阅读整行,可以将其更改为与另一行匹配。@GhostCat在搜索java scanner read Through line
:)时,会有很多GhostCat。。。你的票数比我多5000票是有原因的;-)。。。老实说:我下一步搜索java scanner
,可能使用token
@GhostCat-Nah,这太具体了,更一般的搜索会产生更好的结果。另外,永远不要使用内部搜索引擎,它很糟糕(:'()。使用谷歌或您最喜欢的外部搜索引擎,如果搜索结果包含太多其他网站,请添加site:stackoverflow.com
。无论如何,我感谢您搜索了一个副本:)。@Tom I know。我讨厌内部搜索。我“偏爱”我的前三名(NPE、数组越界、字符串越界),这样我可以更快地关闭dup;-)
tk@localhost:~$ java Strings
13