2013-04-09 67 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; 
      } 

     } 
    } 
}