java中的句子反转

时间:2015-10-25 12:54:47

标签: java string loops

所以我试图改写一个句子,即使编译时我没有任何错误,它告诉我我的反向句子是不合格的。

- 它应该像这样工作:"你好,世界!" - > !dlrow,olleh"

代码:

    String sentence="this is a sentence!";
    String reverseSentence=sentence;
    for(int counter=0;counter<sentence.length();counter++)
    {
        char charToReplace,replaceChar;

        charToReplace = reverseSentence.charAt(counter);
        replaceChar = sentence.charAt(sentence.length()-counter);

        reverseSentence=reverseSentence.replace(charToReplace, replaceChar);

        System.out.println(reverseSentence);
    }

5 个答案:

答案 0 :(得分:2)

您获得异常的原因是,在<batch:step id="step1"> <batch:tasklet> <batch:chunk reader="reader" processor="processor" writer="ItemWriter" commit-interval="3"> <batch:streams> <batch:stream ref="pol01ItemWriter"/> <batch:stream ref="pol02ItemWriter"/> </batch:streams> </batch:chunk> </batch:tasklet> </batch:step> 时,sentence.charAt(sentence.length()-counter)在计数器为0时超出范围。应为sentence.length()-counter

然而,正如Tunaki评论的那样,您的代码还存在其他问题。我建议您使用sentence.length()-1-counter构建反向StringBuilder,而不是使用String(这将替换第一个字符与第二个字符的任何匹配)。

答案 1 :(得分:1)

它不会显示错误,因为有关索引的异常发生在RunTime。

这里:

replaceChar = sentence.charAt(sentence.length()-counter);

您正在尝试访问String(19-0)的索引19。替换为:

replaceChar = sentence.charAt(sentence.length()-counter-1);

我建议你在你的情况下使用StringBuilder

使用reverse()方法:

String sentence = "this is a sentence!";
String reversed = new StringBuilder(sentence).reverse().toString();
System.out.println(reversed); // Prints : !ecnetnes a si siht

或使用append()方法构建新的String对象。这比使用String使用更少的内存,因为每次循环时它都不会创建新的String对象:

String sentence = "this is a sentence!";
StringBuilder reversed = new StringBuilder();

for (int i = 0 ; i < sentence.length() ; i++){
    reversed.append(sentence.charAt(sentence.length() - 1 - i));
}

System.out.println(reversed.toString()); // Prints : !ecnetnes a si siht

答案 2 :(得分:1)

您可以使用字符数组来实现您的需求,

    String sentence = "ABDEF";
    char[] firstString = sentence.toCharArray();
    char[] reversedString = new char[sentence.length()];

    for (int counter = 0; counter < sentence.length(); counter++) {
        reversedString[counter] = firstString[sentence.length() - counter -1];
    }
    System.out.println(String.copyValueOf(reversedString));

答案 3 :(得分:0)

最好不要做任何替换或循环。你从字符串创建一个char数组,反转数组,然后从反转数组创建一个字符串,这将完成你没有任何移动部件或替换的问题。例如:

    String hw = "hello world";
    char[] hwChars = hw.toCharArray();
    ArrayUtils.reverse(hwChars);
    String wh = new String(hwChars);
    System.out.println(wh);

答案 4 :(得分:0)

只需在每个空格处拆分String并将其放在String数组中,然后以相反的顺序打印数组

    public static void main(String[] args) {
    String sentence = "this is a sentence!";
    String[] reverseSentence = sentence.split(" ");

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

    }