翻译句子中的每个单词

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

例子:狐狸跳过篱笆。

成为:ehT xof depmuj revo eht ecnef。

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

您需要对代码进行一些更改:

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

2.use 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 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; } } 

尝试遵循简单的代码。 它更容易:

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

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

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

你可以修改你的代码,如下所示

 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 rev = new ArrayDeque(); // ArrayStack rev = new ArrayStack(); for (int ii = 0; ii < sentence.length(); ii++) { rev.push(sentence.charAt(ii)); } String out = ""; while (rev.size() != 0) { out += rev.pop(); } return out; } } 

试试这个

 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()); } 

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

 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; } }