2016-11-22 38 views
0

我是一名初學者,我想編寫一個程序,該程序從用戶處獲取一個字符串並反轉每個單詞但不是整個句子。例如,如果「gnimmargorP si nuf」是輸入,輸出應該是「Programming is fun」。不「好玩的節目」我能做些什麼或改變使程序看到的句子Java-使用方法

我寫的話:

import java.util.Scanner; 

public class Lab06 
{ 
    public static void main(String[] args) 
    { 
      Scanner scan = new Scanner(System.in); 
      String line; 
      // REVERSER 

      System.out.println(); 
      System.out.println("Please enter a line"); 
      line = scan.nextLine(); 
      System.out.println("The reverse of the sentence is:"); 
      System.out.println(reverse(line)); 
    } 

    public static String reverse(String s) 
    { 
      String answer = ""; 
      int length = s.length(); 
      for (int i = length - 1; i >= 0; i--) 
      { 
       answer = answer + s.charAt(i); 

      } 
      return answer; 
    } 
} 
+3

可以使用line.split(」「),爲了將行成的話,並運行獨立的字反轉。 – Eran

回答

1

您可以用空格分開輸入的句子,並應用了反向方法每個字。最後你可以將它們連接回一個字符串。

+0

但我不知道用戶輸入它之前的句子我怎麼知道在哪裏預先拆分 –

+0

@EkinAlparslan,'split(String)'爲你做,它會返回一個數組。 Areca請在此答案中增加更多有關此方法的信息;) – AxelH

3

試試這個代碼

String input = "gnimmargorP si nuf"; 
    String[] arr = input.split(" "); 
    for (String word : arr) { 
     StringBuilder out = new StringBuilder(word).reverse().append(" "); 
     System.out.print(out.toString()); 
    } 

當然你也可以使用自己的reverse方法

+0

謝謝。我不想引入正則表達式,但當然這是另一種方式。 –

+0

Ohk ......沒關係......但我認爲這樣更安全。 –

-1

您可以分割輸入的字符串,使用StringBuilder的reverse()方法,並連接回一個字符串。

public static String reverse(String s) { 
    StringBuilder answer = new StringBuilder(); 

    if (null == s || 0 == s.length()) { 
     return answer.toString(); 
    } 

    String[] words = s.split(" "); 

    for (int i = 0, lastIndex = s.length() - 1; i < s.length(); i++) { 
     StringBuilder sb = new StringBuilder(words[i]); 

     sb.reverse(); 

     if (i != lastIndex) { 
      sb.append(" "); 
     } 

     answer.append(sb.toString()); 
    } 

    return answer.toString(); 
} 
+0

我想你可能會使用另一個'StringBuilder'作爲'answer'。如果你爲了方便'reverse()'而創建並且殺死每一個迭代,那麼再使用它最有用的地方也不會受到傷害。 – ChiefTwoPencils

0

請嘗試下面的代碼。請評論,如果你不明白任何東西:

import java.util.Scanner; 

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

     // REVERSER 
     try{ 
      System.out.println(); 
      System.out.println("Please enter a line:"); 
      line = scan.nextLine(); 
      StringBuilder answer = new StringBuilder(line.length()); 


      String[] words = line.split("\\s+"); 
      for(String word : words){ 
       answer.append(reverse(word)).append(" "); 
      } 
      System.out.println("The reverse of the sentence is:"); 
      System.out.println(answer); 
     }catch(Exception e){ 

     }finally{ 
      scan.close(); 
     } 
    } 


    public static String reverse(String input) 
    { 
     String answer = ""; 
     int length = input.length(); 
     for (int i = length - 1; i >= 0; i--) { 
      answer = answer + input.charAt(i); 
     } 
     return answer; 
    } 
} 
3

爲了簡潔起見,我將在組合中添加一個Java 8示例。

Arrays.stream("gnimmargorP si nuf".split(" ")) 
     .forEach(s -> System.out.printf("%s ", new StringBuilder(s).reverse())); 

您獲得通過拆分各地" " S中的字符串創建數組流,遍歷每個單詞,並打印後面加一個空格它的反面。

+1

我喜歡用Java 8的答案。它有許多事情像魔術一樣。 –

0

您需要按照下面的步驟:

(1)利用空間分隔符拆分的話

(2)遍歷每個單詞

(3)遍歷每個字符,並添加每個字符StringBuilder對象

(4)後綴對每個字再次空間

(5 )轉換StringBuilder對象到字符串再次

您可以參考下面的代碼註釋:

public static String reverse(String s) { 
     String[] words = s.split(" ");//split the words using space 

     StringBuilder sb = new StringBuilder(); 
     for(String word : words) {//Iterate each word 
      for(int i=word.length()-1;i>=0;i--) {//Iterate each character 
       sb.append(word.charAt(i)); 
      } 
      sb.append(" ");//suffix space again after each word 
     } 
     return sb.toString();//convert to string again 
    } 
+0

我愛'strungbufer' –

+0

我覺得'StringBuilder'比'StringBuffer'好。 –