簡體   English   中英

如何計算字符串中的單詞數?

[英]How do I count the number of words in a string?

我需要計算單詞的數量,我假設正確的方法是計算字符串中前一個字符不是字母(即其他字符)的次數,因為這是假設會有字符串中的冒號、空格、制表符和其他符號。 所以一開始我的想法是遍歷每個字符並計算你不會得到一個字母的次數

    for(int i = 0; i < string.length(); i++) {
      for(int j = 0; i < alphabets.length(); j++) {
       if (string.charAt(i-1) == alphabets.charAt(j)) {
           counter++;
       }
     }
   }

但是,由於這個原因,我總是會得到一個數組越界。 所以,我有點需要一些幫助或其他實際上可以更有效的方法。 我想過只使用匹配 [a-zA-z] 但我不確定如何處理一個字符以與字符串相媲美來計算它出現的次數。

謝謝

您可以使用String.split()將字符串轉換為一個數組,每個元素中包含一個單詞。 字數由數組的長度給出:

int words = myString.split("\s+").length;

這個問題比你的算法允許的稍微復雜一些。

  • 如果一行中有兩個或多個空格怎么辦?
  • 如果字符串以空格(或非單詞字符)開頭或結尾怎么辦?

這看起來像作業,所以我不想提供任何代碼。 我建議采用一種更容易思考的替代方法。

  • 逐個遍歷字符串中的字符。
  • 如果您當前正在掃描一個單詞,或者您當前沒有掃描一個單詞,請記住一些事情。
  • 做一些事情來確定你何時輸入或離開一個詞,並相應地增加你的計數器。

您建議使用像“[A-Za-z]”這樣的正則表達式會很好。 在 split 命令中,您將按相反方向拆分,例如:

String[] words = "示例測試:一、二、三".split("[^A-Za-z]+");

編輯:如果你只是在尋找原始速度,這會更快地完成工作。

public static int countWords(String str) {
    char[] sentence = str.toCharArray();
    boolean inWord = false;
    int wordCt = 0;
    for (char c : sentence) {
        if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') {
            if (!inWord) {
                wordCt++;
                inWord = true;
            }
        } else {
            inWord = false;
        }
    }
    return wordCt;
}

您收到IndexOutOfBoundsException的原因可能是因為當 i 為 0 時,您的內部循環將具有string.charAt(i-1)它將拋出異常,因為 0-1 為 -1。 如果您修復了您的方法可能會起作用,盡管您可以使用更有效的技術。

直接將代碼地址,你的第一個循環的I = 0作為的第一個值,但隨后你問

string.charAt(i-1) = string.charAt(-1),

這就是數組越界的來源。

第二個循環還有一個問題:

for(int j = 0; i <alphabets.length(); j++) {

您可能還想將撇號也視為單詞的一部分。

像這樣使用

String s = "I am Juyel Rana, from Bangladesh";
int count = s.split(" ").length;
   if (string.charAt(i-1) == alphabets.charAt(j)) {
       counter++;
   }

如果字符是某個字母字符,則您正在增加計數器。 如果它不是字母字符,你應該增加它。

下面的程序將計算一個句子中的單詞數。 在這個程序中,我們計算空格之后的字母。 字母表可以是小寫或大寫。 我們在開頭插入一個空格,因為人們不會以空格開始一個句子。 我們還需要注意任何特殊字符或數字都不應該算作一個單詞。

`導入 java.util.Scanner; 公共類 WordSent {

public static void main(String[] args) {

    Scanner in= new Scanner(System.in);
    System.out.println("Enter the sentence");
    String str=in.nextLine();
    String space=" ";
    String spaceword=space.concat(str);

    int count=0;
    for(int i=0; i<spaceword.length()-1;i++)
    {
        for (int k=0; k<=25; k++)
        {
        if(spaceword.charAt(i)==' '&& (spaceword.charAt(i+1)==((char)(65+k)) || spaceword.charAt(i+1)==((char)(97+k))))
        {
            count++;
        }
      }
     }
    System.out.println("Total number of words in a sentence are" +" :  "+   count);
     }
    }`

暫無
暫無

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

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