0

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

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

4

3 回答 3

2

另外,如果我不太了解“维护所选索引”这句话,我相信这可能是您的片段:

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;
}
于 2013-10-03T08:30:39.600 回答
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();
}
于 2013-10-03T07:04:00.677 回答
0

为了避免在这里与字符索引纠缠不清,我会以类中的内置reverse()函数为基础StringBuilder,以牺牲性能为代价。

假设保存指数为n

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

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

于 2013-10-03T07:03:35.857 回答