“编辑”字符串时删除冗余

时间:2013-11-11 05:24:20

标签: java string char substring redundancy

由于字符串是不可变的,我正在尝试重新创建它。 我需要替换其中一个字母。

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)

删除此冗余的最佳方法是什么? 谢谢!

4 个答案:

答案 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