由于字符串是不可变的,我正在尝试重新创建它。 我需要替换其中一个字母。
for (int i = 0; i < mat.length(); i++){
//there's more stuff here, but that'd require a lot more explaining
//the following don't occur at every iteration
//mat and s are always the same length though
if (i == s.length())
mat = mat.substring(0, i) + s.charAt(i);
else
mat = mat.substring(0, i) + s.charAt(i) + mat.substring(i + 1, mat.length());
}
基本上用相同索引处的String s字母改变String mat的字母。 问题是如果它是最后一个索引,我会得到一个越界错误,所以我选择使用if / else来处理它。
但是两个条件都运行代码存在冗余:
mat = mat.substring(0, i) + s.charAt(i)
删除此冗余的最佳方法是什么? 谢谢!
答案 0 :(得分:1)
你想要这样的东西(重构)?
String optional = "";
if ((i != s.length()))
optional= mat.substring(i + 1, mat.length());
mat = mat.substring(0, i) + s.charAt(i) + optional
答案 1 :(得分:0)
如果i=s.length()
比上一个索引为i-1
;
if (i == s.length())
mat = mat.substring(0, i) + s.charAt(i-1);// Use i-1 instead of i.
else
mat = mat.substring(0, i) + s.charAt(i) + mat.substring(i + 1, mat.length());
答案 2 :(得分:0)
如果值i等于字符串s的长度。
在你的代码中,s.charAt(i)超出了数组范围。要使用的最大索引应为 i-1 ,这是最后一个字符。
答案 3 :(得分:0)
pat = pat.substring(0, i) + s.charAt(i) + pat.substring(i + 1, pat.length());
单独工作........我不确定为什么..... 如果需要在String的第一个字母处发生更改,则第一个子句只是“”,同样如果它是最后一个字母......不应该有i +的超出范围的异常1?
更新的 刚刚做了一个快速的临时程序,因为事实证明,如果它只是在最后一个索引之后只有1,那么substring方法的包含索引不会返回超出界限。
实施例:
man ="what";
System.out.println(man.substring(4, 4));
工作得很好,没有任何输出。 如果只使用.print
,控制台甚至不会弹出eclipse