替换字符串的字符

时间:2014-09-29 19:42:30

标签: java string substring iteration

所以我试图迭代一个字符串并用新值替换任何给定子字符串的出现。我似乎无法弄清楚我的代码存在什么问题,因为它似乎没有对我运行的字符串进行任何更改。

我创建一个新的字符串nS,其开头只是“”,并且正在迭代模板,将每个字符视为子字符串s。在每种情况下,某些东西需要用值替换,我将所述值附加到nS上,否则它只是按原样附加当前子字符串。

@Override
public String format(String template) {
    String nS = "";
    for (int i = 0, n = template.length(); i < n; i++) {
        String s = template.substring(i, i + 1);
        switch (s) {
            case "%%":
                nS = nS.concat("%");
                break;

            case "%t":
                nS = nS.concat(String.valueOf(inSeconds()));
                break;
       }
    }
    return nS;
}

实际的代码有更多的情况,但我把它们排除在外,以免它压倒性的。

3 个答案:

答案 0 :(得分:2)

2-arg substring method中的结尾索引是独占

  

子字符串从指定的beginIndex开始,并扩展到索引endIndex - 1处的字符。

     

beginIndex - 起始索引,包括在内。

     

endIndex - 结束索引,不包括。

你得到的字符串恰好是一个字符,而不是2.在适当的边界检查后尝试i + 2

String s = template.substring(i, i + 2);

答案 1 :(得分:1)

假设表现不是一个大问题我会做

public String format(String template) {
    return template.replaceAll ("%%", "\uffff")
                .replaceAll("%t", ""+inSeconds())
                .replaceAll("\uffff", "%");
}

答案 2 :(得分:0)

您正在描述尝试做的事情,例如您正在尝试重写String.replace()

给定字符串s =&#34;我的名字是Bob&#34;

你想要取代&#34; Bob&#34;与&#34;苏珊&#34;你需要做的就是:

String s = "My Name is Bob";
String n = s.replace("Bob", "Susan");
System.out.println(n); //My Name is Susan
System.out.println(s); //My Name is Bob

另一种选择是将字符串分解为字符数组并迭代它。

String s = "My Name is Bob";
char[] bits = s.toCharArray();
for(char c : bits) {
   // logic
}

一次比较两个字符:

String s = "My Name is Bob";
char[] bits = s.toCharArray();
for(int i = 0; i < bits.length; i++) {
    if(i + 1 <= bits.length) {
       String searchFor = "" + bits[i] + bits[i + 1];
       // logic
    }
}