在Java中反转文本

时间:2017-06-09 20:20:56

标签: java

我试图在Java中反转一个字符串,但是当我运行它时我发现了一个错误:

@

这是我的代码:

"Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 3
at java.lang.String.charAt(String.java:658)
at ReversingText.reverse(ReversingText.java:13)
at ReversingText.main(ReversingText.java:27)"

不确定问题出在哪里,因为我认为索引从0开始,所以我将字符串的长度减少1来查找索引?

感谢您的帮助

6 个答案:

答案 0 :(得分:2)

问题是你正在尝试获取变量letter的字符(它以空字符串开头,因此没有长度,因此没有有效索引)而不是text

char character = letter.charAt(i);

试试这个:

char character = text.charAt(i);

答案 1 :(得分:1)

还有其他错误。这是正确的程序。

public class ReversingText {
    public static String reverse(String text) {
            int i = (text.length() - 1);
            String letter = text;
            String reverseletter = "";
            while (i >= 0) {
                char character = letter.charAt(i);
                reverseletter += character;
                i--;
            }
            return reverseletter;
        }

        public static void main(String[] args) {
            Scanner reader = new Scanner(System.in);
            System.out.print("Type in your text: ");
            String text = reader.nextLine();
            System.out.println("In reverse order: " + reverse(text));
        }
}

答案 2 :(得分:1)

问题是您在空字符串i中找到索引letter处的字符。当while循环第一次运行时,i = 3并且letter中的索引3处没有字符。

而是在charAt(i)上致电text

public static String reverse(String text) {
    int i = text.length() - 1;

    String letter = "";

    while (i >= 0) {
        char character = text.charAt(i);
        letter += character;
        i--;
    }

    return letter;
}

或者,对于更简单的反转文本的方法,请使用:

public static String reverse(String text) {
    return new StringBuilder(text).reverse().toString();
}

另请参阅:Reverse a string in Java

答案 3 :(得分:0)

另一个提示:

最后,请记得关闭读者。

public static void main(String[] args) {
    Scanner reader = new Scanner(System.in);
    System.out.print("Type in your text: ");
    String text = reader.nextLine();
    System.out.println("In reverse order: " + reverse(text));
    reader.close(); // add this line
}

答案 4 :(得分:0)

问题在于这一行:char character = letter.charAt(i); 你曾用信而不是文字工作

以下是工作代码:

import java.util.Scanner;

public class ReversingText {

    public static String reverse(String text) {
        int i = text.length()-1;
        System.out.println("length: " + i);

        String letter = "";

        while (i >= 0) {

            char character = text.charAt(i);

            letter += character;
            i--;

        }

        return letter;
    }

    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
        System.out.print("Type in your text: ");
        String text = reader.nextLine();
        System.out.println("In reverse order: " + reverse(text));
    }

}

答案 5 :(得分:0)

这一行的问题:

char character = letter.charAt(i);

您应该使用text变量而不是letter进行操作:

char character = text.charAt(i);

您也可以使用Stack数据结构在另一种方法中实现这一目标:

public static String reverse(String text) {
    Stack<Character> st = new Stack<Character>();
    String rtext = "";
    for(int i = 0; i < text.length(); i++){
        st.push(text.charAt(i));
    }
    while(!st.empty()){
        rtext = rtext + st.pop();
    }
   return rtext;
}