2013-11-03 41 views
1

我想用每个单词的字符向后打印句子。将每个单词翻译成句子

例如: 狐狸跳过栅栏。

成为: ehT xf depmuj revo eht ecnef。

我只能颠倒第一个单词,然后它给了我一个ArrayIndexOutOfBoundsException。

+0

应该有每个单词* *在句子中,标题是太误导 – Evgeny

回答

3

一些变化需要做你的代码:

1.更改sentence.length()words.length

2.使用read.nextLine();来获得句子输入

尝试

import java.util.Scanner; 
import java.util.Stack; 

public class test { 
    public static void main(String[] args) { 
     Scanner read = new Scanner(System.in); // Error in line 11 
     System.out.print("Enter a sentence: "); 
     String sentence = read.nextLine(); 
     boolean containsPeriod= false; 
     if (".".equals(sentence.substring(sentence.length()-1,sentence.length()))){ 
       sentence = sentence.substring(0,sentence.length()-1); 
       containsPeriod=true; 
      } 


     String[] words = sentence.split(" "); 
     for (int i = 0; i < words.length; i++) { 
      String word = words[i]; // Error in line 23 
      System.out.print(reverseWord(word)); 
      if(i!=words.length-1) 
       System.out.print(" "); 
     } 
     if(containsPeriod) 
      System.out.print("."); 
     read.close(); 
    } 

    private static String reverseWord(String sentence) { 
     Stack<Character> rev = new Stack(); 
     for (int ii = 0; ii < sentence.length(); ii++) { 
      rev.push(sentence.charAt(ii)); 
     } 
     String out = ""; 
     while (rev.size() != 0) { 
      out += rev.pop(); 
     } 
     return out; 
    } 
} 
+0

有没有办法让我可以把句子留在句尾?不知何故,当我最后一段时间,这段时间被视为最后一个词的一部分,所以它与最后一个词一起被颠倒过来。 – Drews

+0

已经进行了更新检查 – upog

+0

对不起,但我在哪里把containsPeriod放入? – Drews

4

请尝试下面的简单代码。这是很容易:

String[] words = sentence.split(" "); 
for (String word : words) { 
    System.out.print(new StringBuilder(word).reverse() + " "); 
} 
+0

这是一个很好的答案。 +1。 downvoters可以解释他们的问题吗? –

+0

通常,当问及这些问题时,预期受访者提供算法方法。尽管提到两种方法都很好! – xploreraj

2

在第一for循环替换sentence.length()words.length

你想在句子中每个单词迭代一次这个循环;但是你写的代码在句子中的每个字母上迭代一次。那是你的错误。

0

试试这个

public static void main(String args[]) { 
     String input = "The fox jumped over the fence"; 
     StringBuilder sbReverseSentance = new StringBuilder(); 
     String words[] = input.split(" "); 
     for (String word : words) { 
      for (int i = word.length() - 1; i >= 0; i--) { 
       sbReverseSentance.append(word.charAt(i)); 
      } 
       sbReverseSentance.append(" "); 
     } 
     System.out.println (sbReverseSentance.toString()); 
    } 
0

试试这个,它不处理标点符号。

import java.util.Scanner; 

public class Test { 

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

    System.out.print("Enter a sentence: "); 
    String sentence = read.nextLine(); 

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

    String[] reversed_words = new String[words.length]; 

    for (int i = 0; i < words.length; i++) { 
     reversed_words[i] = reverseWord(words[i]); 
    } 

    for (int i = 0; i < reversed_words.length; i++) 
     System.out.println(reversed_words[i]); 

} 

private static String reverseWord(String word) { 
    String result = ""; 
    char[] array = word.toCharArray(); 
    for (int i = array.length - 1; i >= 0; i--) { 
     result += array[i]; 
    } 
    return result; 
} 
} 
1

您可以修复你的代码如下所示

import java.util.ArrayDeque; 
import java.util.Deque; 
import java.util.Scanner; 

public class Query1 { 
    public static void main(String[] args) { 
     Scanner read = new Scanner(System.in); // Error in line 11 

     System.out.print("Enter a sentence: "); 
     // String sentence = read.next(); 
      // read full line here instead of just one word 
     String sentence = read.nextLine(); 
     String[] words = sentence.split(" "); 
      // this looks goes to array length 
     // for (int i = 0; i < sentence.length(); i++) { 
     for (int i = 0; i < words.length; i++) { 
      String word = words[i]; // Error in line 23 
      // System.out.println(reverseWord(word)); 
        // use print not println 
      System.out.print(reverseWord(word)); 
        // this loop is not at all required 
      // for (i = 0; i < words.length - 1; i++) { 
      // System.out.println(" "); 
      // } 
      System.out.print(" "); 
     } 

    } 

    private static String reverseWord(String sentence) { 
     Deque<Character> rev = new ArrayDeque<Character>(); 
     // ArrayStack<Character> rev = new ArrayStack<Character>(); 

     for (int ii = 0; ii < sentence.length(); ii++) { 
      rev.push(sentence.charAt(ii)); 
     } 
     String out = ""; 
     while (rev.size() != 0) { 
      out += rev.pop(); 

     } 

     return out; 
    } 
} 
+0

欢迎来到SO!还有一个类似的问题。稍后您可以投票结束。祝你好运! –