2016-11-22 42 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'好。 –