2014-07-16 39 views
-1

我是一名java初學者,對java非常瞭解並且理解它的結構有許多問題,這是一年級的計算學生。我如何使'分割'和'wordCount'方法一起工作?

這是我的代碼,我到目前爲止有:

  import java.util.*; 

public class hdtest1 { 
public static void main(String[] args) { 
Scanner sc=new Scanner(System.in);  
String s; 
while(true) 
{ 
    System.out.println("Enter value:"); 
    s=sc.next();  
    if(s.equals("quit"))     
    { 
     break; 
    } 
    String[] s = string.split(" "); 
    int wordCount = 1; 

for (int i = 0; i < str1.length(); i++) 
{ 
    if (str1.charAt(i) == ' '&& str1.charAt(i+1)!=' ') 
    { 
     wordCount++; 
    } 
} 
} 

} 
    System.out.println(""+s); //to Print string 
    System.out.println(""+s.length()); //to print Entered string's length 
    System.out.println("Word count is = " +(str1.length()- wordCount)); 


} 

我想我的Java輸出到顯示在文本窗口中(掃描儀),字符的總數和字符爲數字輸入的文本行每個字。例如,當用戶輸入「你好,我的名字叫馬克」,我找的輸出是:

 Hello, my name is Mark 
     22 
     Hello = 5 
     my = 2 
     name = 4 
     is = 2 
     Mark = 4 
     //Here the scanner loops,appears and is ready for more text to be entered 

所以總結一下我的問題 - 能不能請您糾正我的代碼中的錯誤,使它正確工作並輸出我想要的(如上所示)?非常感謝你的幫助,任何幫助將不勝感激。

此刻我的代碼顯示了很多錯誤,它們是結構錯誤,因爲我對將不同方法匹配在一起的理解很差。到目前爲止,我發現了許多代碼,我認爲它們會一起工作,我試圖用代碼來操縱這些方法,但我似乎只是讓代碼變得更糟,因爲我不明白許多代碼的含義錯誤能夠糾正它們。我的代碼工作正常,直到我開始嘗試通過使用方法'split'拆分掃描儀中輸入的單詞。

這是錯誤的,你去看看的快速列表:

線15 - 重複的變量s,

線15 - 字符串不能得到解決,

線18 - STR1不能得到解決,

線20 - STR1不能得到解決,

線28 - 令牌(一個或多個)語法錯誤,錯位構建體(或多個),

線28 - 令牌 「的println」 語法錯誤,=預期這個令牌之後,

線29 - 令牌(一個或多個),錯位構建體(多個)的語法錯誤,

線30 - 語法錯誤令牌(S),錯位構建體,

線30 - 令牌 「的println」 語法錯誤,=預計此令牌後,

+1

這是什麼,具體而言,有關您遇到麻煩的錯誤消息?例如,讓我們看看第一個錯誤消息:*「重複的變量s」*那個錯誤怎麼樣不清楚?你有'String s;'在一個地方,然後'String [] s = string.split(「」);'在第二個地方(第15行)。每個都是一個*變量聲明*(第二個也有一個初始化器)。您不能在同一範圍內兩次聲明變量。 –

+4

從第一條錯誤消息開始。閱讀。想想看。搜索它。如果你能弄清楚如何修復它,那麼就這樣做。如果沒有,請寫下關於該消息的具體問題,說明你採取了哪些步驟來了解它。根據需要重複。 –

+0

它告訴你行號,所以這應該是一個很大的幫助。 「無法解析」意味着沒有該名稱的變量。語法錯誤有點棘手,但如果您修復縮進,它可能會變得清晰。 – iamnotmaynard

回答

1

將一個句子拆分爲組成單詞,然後簡單地在每個單詞上調用length()方法來獲取字符數。

String[] words = input.split("\\s+"); // get the individual words (separated by white space) 
System.out("#words = " + words.length); 
for (int i = 0; i < words.length; i++) 
    System.out("word[" + i + "]: " + words[i] + " nchars = " + words[i].length()); 
1

看起來你只是想這樣的:

int wordCount = string.split(" ").length; 

如果你想打印的單詞和它們的長度:

for (String word : string.split(" ")) 
    System.out.println(word + " = " + word.length()); 
+0

嗯,這個_does_回答標題中提出的問題,我想。 – iamnotmaynard

1

一旦你從掃描儀具有輸入(說這是一個叫input變量),嘗試:

// The line below splits the sentence into individual tokens by spaces, and puts them into an array 
String[] allWords = input.split(" "); 
System.out.println(input); 
System.out.println(input.length()); // Get number of characters in input 
for (int i = 0; i < allWords.length; i++) { // Loop through each word 
    String word = allWords[i].replaceAll("[^a-zA-Z]", ""); // This uses a regex to eliminate anything but letters and puts the word into a variable "word" 
    System.out.println(word + " = " + word.length()); // Output the word and the length 
} 

將這個塊代碼在掃描器讀取一行的循環中。

請注意,length()方法輸出字符串中的字符數(包括空格)。這就是爲什麼我們在輸出長度時刪除除字母之外的所有其他字符的原因。

+2

OP需要學習如何調試,而不是學習如何讓陌生人在互聯網上爲他/她做功課。 – pamphlet

+0

非常真實,但有時候有一個確切的示例代碼是學習的好方法。我試圖評論每一行,以便OP能夠確切地知道發生了什麼 – krodmannix

+0

當然,你是對的。我只知道太多的學生,更糟糕的是,有太多的專業人士,在試圖儘量減少「研究」和「分析」等活動的同時努力嘗試。 – pamphlet

1

夫婦指針:

  1. 你有一個String和一個String []裏,你不能這樣做,重命名其中的一個。

  2. 「str1」在哪裏?它尚未被聲明或初始化。

3.

System.out.println(""+s); 

「s」 爲已經是一個字符串 「」 +是不必要的。