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

インデックス selectedを維持することを本当に理解していませんでしたが、文字列を反転している場合は、

それはどうですか -

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 に答える