Java 删除冗余,而;编辑「;一串

Java 删除冗余,而;编辑「;一串,java,string,char,substring,redundancy,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

因为字符串是不可变的,所以我尝试重新创建它。 我需要换一封信

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());
}
消除这种冗余的最佳方法是什么? 谢谢

如果
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());
如果
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());

你想要这样的东西(重构)


)

你想要这样的东西(重构)


)

如果值i等于字符串s的长度


在您的代码中,s.charAt(i)超出数组范围。要使用的最大索引应该是i-1,这是最后一个字符。

如果值i等于字符串s的长度

pat = pat.substring(0, i) + s.charAt(i) + pat.substring(i + 1, pat.length());
在您的代码中,s.charAt(i)超出数组范围。要使用的最大索引应为i-1,这是最后一个字符

pat = pat.substring(0, i) + s.charAt(i) + pat.substring(i + 1, pat.length());
它本身就起作用……我不太清楚为什么。。。。。 如果需要在字符串的第一个字母处进行更改,则第一个子句仅为“”,同样,如果它是最后一个字母……i+1是否应该有越界异常

更新: 刚刚做了一个快速的scratch程序,因为它证明了substring方法的inclusive索引如果只比最后一个索引多1,则不会返回越界

例如:

工作正常,没有任何输出。 如果使用just.print,eclipse上甚至不会弹出控制台

它本身就起作用……我不太清楚为什么。。。。。 如果需要在字符串的第一个字母处进行更改,则第一个子句仅为“”,同样,如果它是最后一个字母……i+1是否应该有越界异常

更新: 刚刚做了一个快速的scratch程序,因为它证明了substring方法的inclusive索引如果只比最后一个索引多1,则不会返回越界

例如:

工作正常,没有任何输出。
如果您使用just.print,控制台甚至不会在eclipse上弹出。您是在增加i吗?另外,如果您使用StringBuilder,因为您创建了太多的字符串,这将是非常有效的。
如果(i==s.length())
那么您就完成了–您已经迭代了字符串的所有字符。我想我不能使用StringBuilder哈哈,这是供学校使用的。还有Matt,但我可能需要更改最后一个字符?如果(I==s.length())的计算结果为true,则代码将失败。如果
i
是字符串长度,则随后的
s.charAt(i)
将产生
IndexOutOfBounds
错误。此问题的标题和代码示例非常不清楚。请提供所需输入和输出的示例。是否递增i?另外,如果您使用StringBuilder,因为您创建了太多的字符串,这将是非常有效的。
如果(i==s.length())
那么您就完成了–您已经迭代了字符串的所有字符。我想我不能使用StringBuilder哈哈,这是供学校使用的。还有Matt,但我可能需要更改最后一个字符?如果(I==s.length())的计算结果为true,则代码将失败。如果
i
是字符串长度,则随后的
s.charAt(i)
将产生
IndexOutOfBounds
错误。此问题的标题和代码示例非常不清楚。请提供所需输入和输出的示例。哈哈,我试过了,但不起作用,因为您最初对mat的重新定义有效地切断了结尾。啊,是的,我试图避免使用另一个字符串,因为这是相同/更多的代码。但是你的解决方案不同……嗯,很有趣……给我第二个答案哈哈,我试过了,但不起作用,因为你最初对mat的重新定义有效地切断了结尾。啊,是的,我试图避免使用另一个字符串,因为这是相同/更多的代码。但你的解决方案不同……嗯,很有趣……给我一点时间
    man ="what";

    System.out.println(man.substring(4, 4));