2017-03-08 45 views
1

我試圖計算通過字符串傳遞的文件中的字數。我也顯示字符串,以確保輸出是正確的,我得到的確切內容的文件。計算從文件轉換爲字符串的字數

但是,我的字數統計方法將上一行的最後一個單詞和下一行的第一個單詞統計爲一個單詞。

實施例:「測試字(行)的測試詞語」輸出作爲「測試wordtest詞語」

嘗試添加「\ n」來我的代碼和它現在顯示正確的輸出但正如前面仍計數它。

任何幫助,將不勝感激。

+1

在你的'countWords'方法中,當你看到空格時,你只會增加計數。當你看到換行符('\ n')時,增加計數。 –

+1

另一種方法是使用[BreakIterator](https://docs.oracle.com/javase/7/docs/api/java/text/BreakIterator.html) – Sanjeev

+0

假設這不是一項任務,您也可以使用String#split方法將行分割爲標記並對它們進行計數。 ('line.split( 「\\ B」);')。 –

回答

2

您可以更改檢查空間,包括新太行

if ((line.charAt(i) == ' ' || line.charAt(i) == '\n') && line.charAt(i + 1) != ' ') 
+0

雖然最後一個字可能不計算或「\」 n \ n \ n \ n「導致多個單詞 – toongeorges

+0

@toongeorges這就是爲什麼OPs解決方案在1開始計數而不是0. –

+0

但是,如果文本只包含一個字符,我認爲trick/hack可能會產生不正確的計數字跟一個空格。 –

0

您還可以使用正則表達式計算的條件。

public static int countWords(String line) { 

    Pattern pattern = Pattern.compile("\\w+"); 
    Matcher matcher = pattern.matcher(line); 

    int count = 0; 
    while (matcher.find()) 
     count++; 

    return count; 

    } 
2
/* * Counting number of words using regular expression. */ 
public int countWord(String word) { 
    return word.isEmpty() ? 0 : word.split("\\s+").length; 
} 
+0

我剛剛添加了一個類似的答案,但你的更優雅 –

+0

我試過你的代碼,但得到1額外的單詞返回並不知道爲什麼。 (你不必回答我發現了另一個修復)。 – Levy

+0

也許word.trim()可以解決? –

0

這也是爲什麼「測試字(行)的測試詞」輸出爲「測試wordtest話」

in.nextLine()返回不包括換行字符在該行作爲一個String的原因隊伍的盡頭。請參閱https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html#nextLine--

儘管追蹤字數而不是追加字符串到字符串然後在最後計數會更有效。僞代碼將是這樣的:

int wordCount = 0 
while (file has more lines) { 
    line = line.trim() 
    int wordsOnLine = numberOfSpacesPlusOne(line) 
    wordCount += wordsOnLine 
} 
+0

抱歉忘了提及它是爲了一個任務,我們需要將它傳遞給一個字符串。 – Levy

+1

沒問題:)你可能想使用StringBuilder而不是String。每次執行字符串連接(行+ = ..)時,都會創建一個新的字符串。你的代碼就像這樣一個StringBuilder: 'StringBuilder line = new StringBuilder(); int lines = 0; (in.hasNextLine()){ lines ++; line.append(「\ n」)。append(in.nextLine()); } ... int words = countWords(line.toString());' – Joe

+1

感謝您的輸入。幫助我通過這個課程比你想象的更多:) – Levy

0

你爲什麼不只是

String sentence = "This is a sentence."; 
String[] words = sentence.split(" "); 
System.out.println(words.length); 

分割你的字符串在「」和算的話。