关于反转字符串的Java

时间:2013-10-03 07:02:28

标签: java

我很困惑如何编写一个反转短语但保持所选索引的程序。像这样,

public static void main(String[] args) {
    String string1 = "He is Chinese";

    System.out.println(reverse(string1));
}

private static String reverse(String string) {
    StringBuilder sb = new StringBuilder();
    int length = string.length();
    for(int i=0;i<length;i++) {
        char a = string.charAt(i);
        if(a == ' ') {
            sb.append(a);
        } else {
            int j = i;
            while(j < length && string.charAt(j) != ' ') {
                j++;
            }
            sb.append(ReverseString(string.substring(i, j)));
            i = j-1;
        }
    }
    return sb.toString();
}
private static String ReverseString(String string) {
    StringBuilder sb = new StringBuilder();

    for(int i=string.length()-1;i>=0; i--) {
        sb.append(string.charAt(i));
    }
    return sb.toString();
}

}

选择索引是C.我想将C保留在某些地方,但另一个字母是反向的。

输出显示是  eH si esenihC

3 个答案:

答案 0 :(得分:2)

另外,如果我不太清楚“&#34;维持所选索引”这句话。我相信这可能是你的片段:

public static String reverse( String input ) {
    String[] words = input.split(" ");
    String ret = "";
    for( String word : words) {
        if( ret.length() > 0 ) { ret+=" "; }
        ret += new StringBuilder(word).reverse();
    }
    return ret;
}

希望这可以帮助你...玩得开心!

编辑:如果您希望在翻转单词之后将字符保持在位,这可能是一个解决方案:

public static String reverse(String input, String pivot) {
    String[] words = input.split(" ");
    String ret = "";
    for( int i = 0; i<words.length; i++ ) {
        if (i != 0) { ret += " "; }
        ret += reverse_word(words[i], pivot);
    }
    return ret;
}

public static String reverse_word(String input, String pivot) {
    // warning: split will lose the last occurrence of pivot
    String[] word_parts = input.split(pivot);
    String ret = "";
    for( int i = 0; i<word_parts.length; i++ ) {
        if (i != 0) { ret += pivot; }
        ret += new StringBuilder(word_parts[i]).reverse();
    }
    // check the last one
    ret += input.endsWith(pivot) ? pivot : "";
    return ret;
}

答案 1 :(得分:1)

我真的不明白维护索引选择,但如果它正在反转字符串那么,

怎么样 -

private static String reverse(String string) {
    return new StringBuilder(string).reverse().toString();
}

更新 - 如你所说 - 以及如何将'C'保留在自己的位置?和中国人一样,另一个字母表正在倒转,但只有“C”留在自己的地方

private static String reverse(String string) {
    if(string==null||string.length()<=1)
         return string;
    return string.subString(0,1)+new StringBuilder(string.subString(1)).reverse().toString();
}

答案 2 :(得分:0)

为了避免与字符索引纠缠在一起,我会在reverse()类的内置StringBuilder函数中建立一个解决方案,但会牺牲性能。

假设保存索引为n

char c = string[n];
StringBuilder sb(string).deleteCharAt(n).reverse().insert(n, c);
return sb.toString();

最后,这种方法将推广到一系列这样的保存索引 - 使用循环调用deleteCharAt()和相应的循环进行重新插入。如果你需要,请告诉我。