2013-10-24 110 views
5

句子字符串預計是由空格分隔的一組單詞,例如, 「現在是時候了」。 showWords作業是輸出每行一句的單詞。如何在單獨的一行中單獨顯示句子

這是我的功課,我想,你可以從下面的代碼中看到。我無法弄清楚如何以及使用哪個循環來逐字輸出...請幫助。

import java.util.Scanner; 


public class test { 
    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 

     System.out.println("Enter the sentence"); 
     String sentence = in.nextLine(); 

     showWords(sentence); 
} 

    public static void showWords(String sentence) { 
     int space = sentence.indexOf(" "); 
     sentence = sentence.substring(0,space) + "\n" + sentence.substring(space+1); 
     System.out.println(sentence); 
    } 

} 

回答

0

Java的String類有一個replace方法,你應該看看。這將使這個homework非常容易。

String.replace

1

由於這是一個家庭作業的問題,我不會給你確切的代碼,但我希望你能看方法splitString -class。然後我會推薦一個for-loop。

另一種方法是在你的字符串替換,直到有沒有留下更多的空間(這可以用一個循環,並沒有一個循環來完成,這主要取決於你怎麼做)

+0

'replace'方法將通過單個方法調用處理所有出現的空格字符。無需循環。 – nhgrif

+0

@nhgrif該方法是的,但還有其他替代方法(如replaceFirst,或使用類似OP的子字符串似乎已經嘗試過)。當然,'replace'可能是最簡單的解決方案。 –

+0

多空間呢?正則表達式替換是一個更好的選擇 – Bohemian

0

更新

使用String類的split方法將空格字符分隔符上的輸入字符串拆分,以便以字符串數組結束。

使用通過該陣列然後循環經修飾的for循環輸出所述陣列的每個項目。

import java.util.Scanner; 


    public class Test { 
     public static void main(String[] args) { 
      Scanner in = new Scanner(System.in); 

      System.out.println("Enter the sentence"); 
      String sentence = in.nextLine(); 

      showWords(sentence); 
    } 

     public static void showWords(String sentence) { 
      String[] words = sentence.split(' '); 
      for(String word : words) { 
      System.out.println(word); 
      } 
     } 

    } 
+2

這個問題是關於一個家庭作業的任務。發佈一個徹底的答案不是特別有用。 – nhgrif

+0

@nhgrif:是的,你說得對。我添加了一些解釋。 – Rami

1

使用正則表達式,你可以使用一個班輪:

System.out.println(sentence.replaceAll("\\s+", "\n")); 

與額外的好處多個空格不會留下空白行作爲輸出。


如果你需要一個更簡單的 String方法接近你可以使用 split()作爲

String[] split = sentence.split(" "); 
StringBuilder sb = new StringBuilder(); 
for (String word : split) { 
    if (word.length() > 0) { // eliminate blank lines 
     sb.append(word).append("\n"); 
    } 
} 
System.out.println(sb); 


如果你需要一個更裸露的骨頭的做法(低至 String索引)和更多的自己的代碼行;你需要將你的代碼封裝在一個循環中並稍微調整一下。

int space, word = 0; 
StringBuilder sb = new StringBuilder(); 

while ((space = sentence.indexOf(" ", word)) != -1) { 
    if (space != word) { // eliminate consecutive spaces 
     sb.append(sentence.substring(word, space)).append("\n"); 
    } 
    word = space + 1; 
} 

// append the last word 
sb.append(sentence.substring(word)); 

System.out.println(sb); 
+0

問題是關於家庭作業的任務。發佈一個徹底的答案不是特別有用。 – nhgrif

1

你在正確的道路上。你的showWords方法適用於第一個單詞,你只需要完成,直到沒有詞。

循環遍歷它們,最好使用while循環。如果你使用while循環,考慮什麼時候需要它停止,這是什麼時候沒有更多的單詞。

要做到這一點,您可以保留最後一個單詞的索引並從那裏搜索(直到沒有更多)或刪除最後一個單詞,直到句子字符串爲空。

相關問題