我很困惑如何编写一个反转短语但保持所选索引的程序。像这样,
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
答案 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()
和相应的循环进行重新插入。如果你需要,请告诉我。