1

我只是想用字符数组做一些事情。当我反转它时,每个原始字符后面都会出现一个空格。为什么 ?我的代码片段是这样的

public class StringReverseChar {
//REVERSE A STRING CHARACTER BY CHARACTER
    static String mStr=".gnihtemos od ot gniyrT ma I";
    int len;
    int topOfS;
    char[] myReverse=new char[75];

    public StringReverseChar() {
         topOfS=-1;
         myReverse=new char[70];
    }
    public static void main(String ar[]){

        StringReverseChar mObj=new StringReverseChar();
        int len=mObj.calLen(mStr);
        for(int i=0;i<len;i++)
              mObj.pushChar(mStr.charAt(i));
//      System.out.println("The Reverse is:");
        while(mObj.topOfS !=-1)
        System.out.print(mObj.popChar());
    }

    private char popChar() {
        return myReverse[topOfS--];
    }
    private void pushChar(char c) {
        myReverse[++topOfS]=c;
        System.out.print(myReverse[topOfS++]);
    }

    private int calLen(String mStr2) {
        return mStr2.length();
    }
}

我的输出是这样的: 反过来是: I amtryingtodosomething 。

4

4 回答 4

3

罪魁祸首在这里:

private void pushChar(char c) {
    myReverse[++topOfS]=c;
    System.out.print(myReverse[topOfS++]);
}

你增加topOfS了两次。

请注意,整个代码可以替换为:

public class StringReverseChar {
    static String mStr=".gnihtemos od ot gniyrT ma I";
    public static void main(String ar[]) {
        System.out.println(new StringBuilder(mStr).reverse());
    }
}
于 2013-01-03T06:07:57.467 回答
2

-首先,除非有必要,否则您永远不应该重新发明轮子。

-使用StringBuilder (非线程安全)StringBuffer (线程安全)方法reverse()

例如:

String mStr= ".gnihtemos od ot gniyrT ma I";

String reStr = new StringBuilder(mStr).reverse();

您的代码中的问题:

-增加了两次。

private void pushChar(char c) {
    myReverse[++topOfS]=c;
    System.out.print(myReverse[topOfS++]);
}
于 2013-01-03T06:28:22.900 回答
1
    private void pushChar(char c) {
        myReverse[++topOfS]=c;
       System.out.print(myReverse[topOfS++]);
   }

应该:

    private void pushChar(char c) {
        myReverse[++topOfS]=c;
       System.out.print(myReverse[topOfS]);
   }

一个。如果你做出这样的改变,你还有问题吗?不知道那是调试代码,还是一直存在的东西。

于 2013-01-03T06:09:43.580 回答
1
myReverse[++topOfS]=c;
        System.out.print(myReverse[topOfS++]);

你为什么要增加两次?

于 2013-01-03T06:09:34.207 回答