【问题标题】:Length method in java , when used on input string does not produce the expected result [duplicate]java中的Length方法,在输入字符串上使用时不会产生预期的结果[重复]
【发布时间】:2017-09-06 08:05:21
【问题描述】:

我的初始代码没有产生预期的结果:

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

这不是我的字符串的长度。 但是当我尝试这个(没有用户输入)时:

class Strings {
    public static void main(String[] args) {
        String str = new String("avada kedavra");
        System.out.println(str.length());
    }
}

输出:

 tk@localhost:~$ java Strings  
                 13

有效! 那么,为什么当我从用户那里获取输入时它不起作用?我错过了什么?

【问题讨论】:

  • 下一个词是avada。
  • 使用sc.nextLine()
  • 谢谢。成功了!
  • java 扫描器的next() 方法有空格作为分隔符。这意味着只要找到一个,您正在阅读的字符串就会在那里结束。按照 Eran 的说法,如果所有内容都在一行中,请使用 nextLine()(请注意,如果有新行,您必须使用 nextLine() 与您拥有的行一样多次,否则您将遇到同样的问题)
  • 仅作记录:尽管您的问题已作为 dup 关闭 - 不要忘记在某个时候接受其中一个答案。我发现你的问题写得很好,而且“足够好”可以留下来。

标签: java string java.util.scanner


【解决方案1】:

默认情况下,sc.next() 查找并返回下一个完整的令牌。默认情况下,标记是一个单词,用空格或换行符分隔(\p{javaWhitespace}+)。

所以在你的第一个例子中,word1 = "avada",长度为 5。

使用sc.nextLine() 获取完整行。

【讨论】:

  • 为了完整,它默认使用delimiter\p{javaWhitespace}+。如果我们不想阅读整行,可以将其更改为匹配另一个 Pattern
  • @GhostCat 只要搜索java scanner read whole line 就会有很多 :)。
  • @Tom ... 你的票数比我多 5000 票是有原因的 ;-) ... 老实说:我搜索 java scanner next 并且可能搜索 token
  • @GhostCat Nah,这太具体了,更一般的搜索会产生更好的结果。也永远不要使用内部搜索引擎,它很烂(:'()。使用谷歌或你最喜欢的外部搜索引擎,如果搜索结果包含太多其他网站,请添加site:stackoverflow.com。无论如何,我很感激你搜索一个骗子:)。
  • @Tom 我知道。我讨厌内部搜索。我已经“收藏”了我的前三名(NPE、数组越界、字符串越界),这样我就可以更快地关闭它们;-)
【解决方案2】:

简而言之:RTFM

点击懒惰的时间稍长:扫描程序在调用next时返回“下一个令牌”@ 令牌是通过采用模式计算的,默认情况下是“所有空格”。因此,您对 next 的调用会返回下一个单词,而不是您想要的完整行。

在实例化Scanner 时设置拟合模式或改为调用nextLine

【讨论】:

  • 我看不出与其他答案的区别...
  • @Derlin 及时重叠。当我开始写作时,没有答案,我只是需要更长的时间,因为我必须获得指向 Javadoc 的链接
  • 我明白了^^
猜你喜欢
  • 2017-06-07
  • 1970-01-01
  • 2013-07-14
  • 1970-01-01
  • 1970-01-01
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
  • 2018-11-26
相关资源
最近更新 更多