您可以使用Java API中的以下方法:
类字符串: 长度,charAt
StringBuilder类: 长度,charAt,追加,toString
类字符:任何方法
moveAllXsRight将一个char和一个String作为输入并返回一个String。 输出字符串应与输入字符串相同,只是每次出现的输入字符都应向右移一个字符。如果无法向右移动字符(它在字符串的末尾),则不会移动。不要使用数组来解决此问题。
HW2.moveAllXsRight('X',“ abcXdeXXXfghXiXXjXX”) “ abcdXefXXXghiXjXXXX”
这是我的代码:
public static String moveAllXsRight(char a, String b){
StringBuilder sb = new StringBuilder();
String str ="";
for ( int i = 0; i<b.length(); i++){
if(b.charAt(i) != a){
sb.append(b.charAt(i));
}
else if(b.charAt(i) == a){
str = Character.toString(b.charAt(i));
}
else {
if(b.charAt(i+2)>sb.length()){
sb.append(b.charAt(i));
}
}
}
return sb.toString();
}
答案 0 :(得分:0)
尝试一下:
public static String moveAllXsRight(char a, String b) {
StringBuilder sb = new StringBuilder(b);
for(int i = 0; i < sb.length() - 1; i++) {
if(sb.charAt(i) == a) {
// swapping with the right character
sb.setCharAt(i, sb.charAt(i + 1));
sb.setCharAt(i + 1, a);
// skipping next index (because we already know it contains `a`)
i = i + 1;
}
}
return sb.toString();
}
对于此示例:
moveAllXsRight('X', "abcXdeXXXfghXiXXjXX");
这是输出:
abcdXeXXfXghiXXXjXX
更新:
通过稍微改变for
循环(将其反转):
for(int i = sb.length() - 2; i > 0; i--) { // inverse loop
if(sb.charAt(i) == a) {
// swapping
sb.setCharAt(i, sb.charAt(i + 1));
sb.setCharAt(i + 1, a);
}
}
现在,这个:
moveAllXsRight('X', "abcXdeXXXfghXiXXjXX");
结果:
abcdXefXXXghiXjXXXX
现在,您可以决定要使用哪个版本。
答案 1 :(得分:0)
这里是一种方法:
public static String moveAllXsRight(char a, String b) {
char[] chars = b.toCharArray();
for (int i = 0; i < chars.length-1; ++i) {
if (chars[i] == a) {
chars[i] = chars[i+1];
chars[i+1] = a;
}
}
return new String(chars);
}
当参数分别为"abcdeXXXfghXiXXjXXX"
和'X'
时,它会给出"abcXdeXXXfghXiXXjXX"
。
这是另一种方式:
public static String moveAllXsRight(char a, String b) {
char[] chars = b.toCharArray();
boolean wasa = false;
for (int i = 0; i < chars.length; ++i) {
char c = chars[i];
if (wasa) {
chars[i-1] = c;
chars[i] = a;
}
wasa = c == a;
}
return new String(chars);
}
它给出"abcdXeXXfXghiXXjXXX"
。
更新
这是另一种方式:
public static String moveAllXsRight(char a, String b) {
char[] chars = b.toCharArray();
for (int i = chars.length-1; --i >= 0;) {
char c = chars[i];
if (c == a) {
chars[i] = chars[i+1];
chars[i+1] = a;
}
}
return new String(chars);
}
它会提供"abcdXefXXXghiXjXXXX"
,这正是您所期望的。
更新2:
使用StringBuilder
避免使用数组:
public static String moveAllXsRight(char a, String b) {
StringBuilder buf = new StringBuilder(b);
for (int i = buf.length()-1; --i >= 0;) {
char c = buf.charAt(i);
if (c == a) {
buf.setCharAt(i, buf.charAt(i+1));
buf.setCharAt(i+1, a);
}
}
return buf.toString();
}
答案 2 :(得分:-2)
public static String moveAllXsRight(char a, String b){
String str ="";
int n = 0;
char lower_a = Character.toLowerCase(a);
char upper_a = Character.toUpperCase(a);
for ( int i = b.length()-2; i>=0; i--){
if(b.charAt(i) == lower_a || b.charAt(i) == upper_a){
n++;
}
}
str = b.substring(b.length()-n) + b.substring(0,b.length()-n);
return str;
}