簡體   English   中英

獲取java中字符串中的單詞數

[英]get the number of words in the string in java

這是我為計算字符串中的單詞而編寫的代碼。

import java.util.Scanner;
public class word1
{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        System.out.print("enter a line: ");
        String p =in.next();
        int q= p.length();
        int i;
        int count=0;
        for( i=0; i<q; i++)
        {
            if( p.charAt(i)==' ')
            {
                count++;
            }
        }
        System.out.print(count);

    }
}

我已經嘗試了幾次,但結果只給了我0 ,我做錯了什么?

嗨,我同意您需要使用nextLine()
但是據我了解,對''(空格)進行計數並不是計數單詞的一種好方法
最好用

String p = in.nextLine();
String[] list = p.split("\\W+"); 
System.out.print(list.length);

這樣即使您的字符串以空格開頭也可以
這也使您可以跳過多個空格

您的代碼產生0的原因是當您調用

String p = in.next();

您的字符串會得到第一個單詞,然后停止。 next()掃描到第一個定界符,然后返回。

替換為

String p = in.nextLine();

閱讀整行。

請注意,您的方法是不正確的,因為它依賴於計算空格數,而不是單詞數。 這不是同一件事,因為單詞可以用多個空格分隔。

更好的方法是重復調用next ,直到hasNext()返回false ,然后打印能夠成功調用next 這將是用戶輸入的單詞數。

nextLine()替換next() ,否則它將在第一個單詞處停止並且不會繼續。


Scanner#next()

查找並返回此掃描儀的下一個完整令牌。 完整的標記在其前面,然后是與定界符模式匹配的輸入。 即使先前調用hasNext()返回true,此方法也可能在等待輸入掃描時阻塞。


掃描儀的默認定界符

[...]掃描程序使用定界符模式將其輸入分為令牌, 默認情況下 ,該模式與空格匹配 。[...]


Scanner in = new Scanner(System.in);
System.out.print("enter a line: ");
int count = (int)Pattern.compile("\\W+")
                        .splitAsStream(in.nextLine())
                        .count();
System.out.println(count);

資料來源: Javadoc

您可以使用按空格split ,然后獲取大小。

str = "Hello, a b c";
String[] splited = str.split("\\s+");

並添加其他符號以進行分割。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM