所以我试图迭代一个字符串并用新值替换任何给定子字符串的出现。我似乎无法弄清楚我的代码存在什么问题,因为它似乎没有对我运行的字符串进行任何更改。
我创建一个新的字符串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;
}
实际的代码有更多的情况,但我把它们排除在外,以免它压倒性的。
答案 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
}
}