2013-04-09 126 views
1

我試圖讓一個程序從掃描器獲取字符串的輸入,但我想分解輸入的字符串並顛倒單詞的順序。這是我迄今爲止。如何反轉Java字符串的字

Scanner input = new Scanner(System.in); 
System.out.println("Enter your string"); 
StringBuilder welcome = new StringBuilder(input.next()); 
int i; 
for(i = 0; i < welcome.length(); i++){ 
    // Will recognize a space in words 
    if(Character.isWhitespace(welcome.charAt(i))) { 
     Character a = welcome.charAt(i); 
    } 
} 

我想要做的是在識別出空間之後,捕獲它之前的所有內容等等,然後重新排列字符串。

+0

可能要使用''String.substring在那裏()的地方.. 。 – jtahlborn 2013-04-09 18:52:16

+1

您可以利用['String.split'](http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String))和['Collections.reverse'](http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#reverse(java.util.List))。 – Perception 2013-04-09 18:57:31

+0

'input.next()'只會返回一個單詞。相反,你可以使用'input.nextLine()'來獲得一整行。 – ddmps 2013-04-09 18:58:46

回答

3

我確實建議先扭轉整個字符串。 然後顛倒兩個空格之間的子串。

public class ReverseByWord { 

    public static String reversePart (String in){ 
     // Reverses the complete string 
     String reversed = ""; 
     for (int i=0; i<in.length(); i++){ 
      reversed=in.charAt(i)+reversed; 
     } 
     return reversed; 
    } 

    public static String reverseByWord (String in){ 
     // First reverses the complete string 
     // "I am going there" becomes "ereht gniog ma I" 
     // After that we just need to reverse each word. 
     String reversed = reversePart(in); 
     String word_reversal=""; 
     int last_space=-1; 
     int j=0; 
     while (j<in.length()){ 
      if (reversed.charAt(j)==' '){ 
       word_reversal=word_reversal+reversePart(reversed.substring(last_space+1, j)); 
       word_reversal=word_reversal+" "; 
       last_space=j; 
      } 
      j++; 
     } 
     word_reversal=word_reversal+reversePart(reversed.substring(last_space+1, in.length())); 
     return word_reversal; 
    } 

    public static void main(String[] args) { 
     // TODO code application logic here 
     System.out.println(reverseByWord("I am going there")); 
    } 
} 
+0

謝謝!這很快且很有幫助,非常感謝。 – mmorcos 2013-04-09 20:00:32

+0

不客氣! PS:我建議更新您的姓名:P – 2013-04-09 20:57:44

4

編輯問題後。

import java.util.Arrays; 
import java.util.Collections; 
import java.util.List; 
import java.util.stream.Collectors; 

public class Main { 

    public static void main(String[] args) { 
     final String welcome = "How should we get words in string form a List?"; 
     final List<String> words = Arrays.asList(welcome.split("\\s")); 
     Collections.reverse(words); 
     final String rev = words.stream().collect(Collectors.joining(", ")); 
     System.out.println("Your sentence, reversed: " + rev); 
    } 
} 

執行:

Your sentence, reversed: List?, a, form, string, in, words, get, we, should, How 
+0

類型列表不是通用的,不能參數化 – 2016-04-02 10:37:52

+0

請參閱Javadoc的列表:https://docs.oracle.com/javase/8/docs/api/java /util/List.html – Aubin 2016-04-02 15:28:57

+0

得到它的eclipse自動導入awt.list用於awt gui' – 2016-04-02 15:57:13

1

這裏是你可以在輸入的字符串顛倒字的方式:

Scanner input = new Scanner(System.in); 
System.out.println("Enter your string"); 
String s = input.next(); 

if(!s.trim().contains(' ')) { 
    return s; 
} 
else { 

    StringBuilder reversedString = new StringBuilder(); 
    String[] sa = s.trim().split(' '); 

    for(int i = sa.length() - 1; i >= 0: i - 1) { 

     reversedString.append(sa[i]); 
     reversedString.append(' '); 
    } 

    return reversedString.toString().trim(); 
} 

希望這有助於。

0
public class StringReverse { 
    public static void main(String[] args) { 
     String str="This is anil thakur"; 
     String[] arr=str.split(" "); 

     StringBuilder builder=new StringBuilder(""); 
     for(int i=arr.length-1; i>=0;i--){ 
      builder.append(arr[i]+" "); 
     } 
     System.out.println(builder.toString()); 
    } 

} 

Output: thakur anil is This 
+0

只有代碼答案不鼓勵。 – whoan 2015-12-02 10:48:35

1

如果你想減少代碼的行數,我覺得你可以看看我的代碼:

package com.sujit; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class StatementReverse { 
    public static void main(String[] args) throws IOException { 
     String str; 
     String arr[]; 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     System.out.println("Enter a string:"); 
     str = br.readLine(); 
     arr = str.split("\\s+"); 

     for (int i = arr.length - 1;; i--) { 
      if (i >= 0) { 
       System.out.print(arr[i] + " "); 
      } else { 
       break; 
      } 

     } 
    } 
}