[英]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.