簡體   English   中英

字符計數在Java中不累加

[英]Character counts do not add up in Java

我正在編寫一個遍歷文件並提供字符計數的Java程序。 我遇到的問題是我的人數沒有增加。 當我添加isAlphabetic(char c)isDigit(char c) ,它們不等於isLetterOrDigit(char c)方法(如果我使用的術語錯誤,請原諒我)。

我想念什么? 到目前為止,這是我的代碼的副本。

for (String word : words) {
                char[] ch = word.toCharArray();
                for (int i = 0; i < word.length(); i++) {
                    if (Character.isBmpCodePoint(ch[i])) {
                        charCount++;
                        if (Character.isLetterOrDigit(ch[i])) {
                            alphnumCount++;
                        }
                        if (Character.isAlphabetic(ch[i])) {
                            alphabetCount++;
                        }
                        if (Character.isDigit(ch[i])) {
                            numericCount++;
                        }
                    }
                }
            }
            // Reading next line into currentLine
            currentLine = reader.readLine();
        }
        // Printing charCount, wordCount and lineCount
        System.out.println("Number Of Chars In..Lab.docx File : " + charCount);
        System.out.println("Number Of Alph+Numeric Chars In..Lab.docx File : " + alphnumCount);
        System.out.println("Number Of Alphabet Chars In..Lab.docx File : " + alphabetCount);
        System.out.println("Number Of Numeric Chars In..Lab.docx File : " + numericCount);
        System.out.println("Number Of Words In..Lab.docx File : " + wordCount);
        System.out.println("Number Of Lines In..Lab.docx File : " + lineCount);
        System.out.println(alphabetCount + numericCount - alphnumCount);

        reader.close(); // Closing the reader
    }
}

我認為這里的問題是您正在閱讀*.docx文件。

如果我使用具有以下內容的簡單文本文件,則腳本可以工作。

Test123
7asdf

輸出為:

Number Of Chars In..CSCI_1136_Lab6.docx File : 12
Number Of Alph+Numeric Chars In..CSCI_1136_Lab6.docx File : 12
Number Of Alphabet Chars In..CSCI_1136_Lab6.docx File : 8
Number Of Numeric Chars In..CSCI_1136_Lab6.docx File : 4
Number Of Words In..CSCI_1136_Lab6.docx File : 2
Number Of Lines In..CSCI_1136_Lab6.docx File : 2
0

如果要在*.docx文件中計算字符,則用這種方法是不可能的,因為您正在將該文件的字節解釋為String,而字節不是。

DOCX以XML格式編寫,該格式由包含XML和二進制文件的ZIP存檔文件組成。

來自法醫維基

因此, *.docx文件不會以純文本形式存儲,這在您的代碼中是期望的。

另一點是您使用的是Character.isAlphabetic()而不是Character.isLetter()

形成用於Character.isAlphabetic()文檔

確定指定的字符(Unicode代碼點)是否為字母。

如果getType(codePoint)提供的字符的常規類別類型為以下任意一種,則認為該字符為字母:

  • 大寫字母
  • 小寫字母
  • TITLECASE_LETTER
  • MODIFIER_LETTER
  • OTHER_LETTER
  • LETTER_NUMBER

或具有Unicode標准定義的貢獻性屬性Other_Alphabetic。

形成用於Character.isLetter()文檔

確定指定的字符(Unicode代碼點)是否為字母。

如果Character.getType(ch)提供的常規類別類型為以下任意一種,則認為該字符為字母:

  • 大寫字母
  • 小寫字母
  • TITLECASE_LETTER
  • MODIFIER_LETTER
  • OTHER_LETTER

並非所有字母都有大小寫。 許多字符是字母,但既不是大寫字母也不是小寫字母也不是標題字母。

因此,這兩種方法之間存在差異。 方法Character.isLetterOrDigit()使用isLetter()isDigit() ;

確定指定的字符(Unicode代碼點)是字母還是數字。

如果isLetter(codePoint)或isDigit(codePoint)對該字符返回true,則該字符被視為字母或數字。

來自Character.isLetterOrDigit()文檔

因此,如果使用Character.isLetter()而不是Character.isAlphabetic()結果應該正確。

這是我使用Character.isLetter()獲得*.docx文件的結果:

Number Of Chars In..CSCI_1136_Lab6.docx File : 5923
Number Of Alph+Numeric Chars In..CSCI_1136_Lab6.docx File : 1758
Number Of Alphabet Chars In..CSCI_1136_Lab6.docx File : 1550
Number Of Numeric Chars In..CSCI_1136_Lab6.docx File : 208
Number Of Words In..CSCI_1136_Lab6.docx File : 66
Number Of Lines In..CSCI_1136_Lab6.docx File : 48
0

暫無
暫無

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

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