Java中的字符串字反转给出了错误的结果?

时间:2015-05-06 04:06:16

标签: java string reverse

这是我的代码,用于在不使用任何API的情况下打印在Java中反转的字符串字符。但它没有正常工作。有人可以帮我纠正吗?

public static void main(String args[]) {
    String input = "I am test";
    String result = "";
    for (int i = input.length() - 1; i > 0; i--) {
        Character c = input.charAt(i);
        if (c != ' ') {
            result = c + result;
        } else {
            System.out.println(result + " ");
        }
    }
}

它提供输出"测试amtest",而输出应该是"测试我"。

请不要使用预定义的方法或API来帮助我获得准确的输出。

5 个答案:

答案 0 :(得分:14)

您的实施有四个问题:

  • 你不会一直到零,
  • 您在循环中的每个打印输出后放置一行,
  • 循环结束后,您不打印“尾部”结果,
  • 在循环中打印后,您不会清除result

修复这些问题会为您提供正确的输出(demo)。

答案 1 :(得分:4)

public static void main(String args[]) {
    String input = "I am test";
    String result = "";
    int start=input.length()-1;
    for (int i = input.length()-1; i >=0; i--) {
        Character c = input.charAt(i);
        if (c == ' ') {
            for(int j=i+1;j<=start;j++)
                result +=input.charAt(j);
            result+=" ";
            start=i-1;
        }
        else if (i==0)
        {
            for(int j=0;j<=start;j++)
                result +=input.charAt(j);
        }
    }
    System.out.println(result);
}//It is giving output as test amtest
//output should be : test am I

答案 2 :(得分:4)

public static void main(String args[]) {
    String input = "I am test";
    String result = "";

    String[] frags = input.split(" ");
    for (int i = frags.length - 1; i >= 0; i--) {
        System.out.print(frags[i] + " ");
        }
    System.out.println();
 }

答案 3 :(得分:1)

您也可以尝试递归 -

public static void main(String args[]) {
    String input = "I am test";
    List<String> listOfString = Arrays.asList(input.split(" "));

    System.out.println(reverseString(listOfString));

}

private static String reverseString(List<String> input) {
    int n = input.size();
    String result = "";
    if(input.isEmpty()){
        return result;
    }

    if(n>1){
   /*adding last element with space and changes the size of list as well
        test + " " + [am, I] 
        test + " " + am + " " + [I]*/

        result = input.get(n-1) + " " + reverseString(input.subList(0, n-1));
    }else{
        result = input.get(n-1);
    }               
    return result;

}
希望它有所帮助。

答案 4 :(得分:-1)

public static void main(String args[]){
    String input = "I am test";
    String result="";
    for(int i=input.length()-1;i>=0;i--){
        result=result+input.charAt(i);
    }
    System.out.println(result);
}