如何用' *'替换字符。在奇数指数处用' +'

时间:2018-06-11 04:57:37

标签: java replace indexof

我想用' +'替换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;
    }

由于

2 个答案:

答案 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一样),但你需要创建另一个字符串来返回(不可变属性)

算法将是:

  1. 对于短语中的任何元素。
  2. 检查对迭代是否等于要替换的char。如果为真,请添加&#34; +&#34;到输出字符串。
  3. 检查奇数迭代是否等于要替换的char。如果为真,请添加&#34; *&#34;到输出字符串。
  4. 如果不是s,只需将输入字符添加到输出字符串。
  5. 强调方法:

    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

    的技巧