我想用' +'替换s char。如果它在奇数索引处用' *'
这是我的代码
//calling emphasize(shanuss,s)
//expected output +hanu*+
public static String emphasize(String phrase ,char ch) {
String l = phrase;
char c = ch;
int s = l.indexOf(c);
while (s >= 0) {
if(s%2==0)
{ l=l.replace(l.charAt(s),'+');}
else{l=l.replace(l.charAt(s),'*');}
s = l.indexOf(c, s + 1);
}
return l;
}
由于
答案 0 :(得分:3)
您可能会发现使用char[]
比使用String
更容易,因为String
是不可变的,这意味着您必须不断创建新的String
对象。首先转换为char[]
,然后迭代它。
public static String emphasize(String phrase, char toReplace) {
char[] characters = phrase.toCharArray();
for (int index = 0; index < characters.length; index++ ) {
if (characters[index] == toReplace) {
characters[index] = index % 2 == 1 ? '+' : '*';
}
}
return new String(characters);
}
答案 1 :(得分:0)
@Dawood answer的替代方法是使用字符串(就像你在做atm一样),但你需要创建另一个字符串来返回(不可变属性)
算法将是:
public class TestEmphasize {
public static void main(String[] args) {
System.out.println(emphasize("shanuss",'s'));
}
public static String emphasize(String phrase ,char ch) {
int s = phrase.indexOf(ch);
String output = "";
for(int i = 0; i < phrase.length(); i++) {
if(s%2 == 0 && s == i) output += "+";
if(s%2 != 0 && s == i) output += "*";
else if(phrase.charAt(i) != ch) output += phrase.charAt(i);
s = phrase.indexOf(ch, s + 1);
}
return output;
}
}
+hanu*+
如果您仍想使用原始代码,则应使用replaceFirst(String regex,String replacement)
,因为replace(CharSequence target, CharSequence replacement)
方法会将所有s
更改为+
,从而导致意外行为
l=l.replaceFirst(l.charAt(s)+"",'+'+"");
注意:+ ""
是将char
转换为String