Java 获取错误“;字符串索引超出范围:0“;浅谈字符串生成器的使用

Java 获取错误“;字符串索引超出范围:0“;浅谈字符串生成器的使用,java,string,Java,String,这是我用Java编写的代码(用于返回字符串的两个部分-一个是奇数部分,从索引0或第一个字符开始,另一个是从索引1或第二个字符开始): 公共类StringTest{ 公共字符串(字符串消息,int start){ int length=message.length(); StringBuilder输出=新StringBuilder(长度); char ch; int i; 如果((开始==0)| |(开始==1)){ for(i=开始;i 这是否与“output”一开始被声明为空,并且setCha

这是我用Java编写的代码(用于返回字符串的两个部分-一个是奇数部分,从索引0或第一个字符开始,另一个是从索引1或第二个字符开始):

公共类StringTest{
公共字符串(字符串消息,int start){
int length=message.length();
StringBuilder输出=新StringBuilder(长度);
char ch;
int i;
如果((开始==0)| |(开始==1)){
for(i=开始;i

这是否与“output”一开始被声明为空,并且setCharAt方法只能替换已经存在的字符有关

是的,这正是你得到这个错误的原因

请注意,创建具有指定长度的
StringBuilder
,如下所示:

StringBuilder output = new StringBuilder(length);
创建一个已经有那么多字符的
StringBuilder
-它只创建一个具有该内部缓冲区大小的
StringBuilder
。StringBuilder本身仍然不包含字符,因此尝试设置第一个字符将导致出现异常

StringBuilder
上调用
append
,以添加字符,而不是
setCharAt


这是否与“output”一开始被声明为空,并且setCharAt方法只能替换已经存在的字符有关

是的,这正是你得到这个错误的原因

请注意,创建具有指定长度的
StringBuilder
,如下所示:

StringBuilder output = new StringBuilder(length);
创建一个已经有那么多字符的
StringBuilder
-它只创建一个具有该内部缓冲区大小的
StringBuilder
。StringBuilder本身仍然不包含字符,因此尝试设置第一个字符将导致出现异常

StringBuilder
上调用
append
,以添加字符,而不是
setCharAt


这与“输出”被声明为空这一事实有关吗 首先,setCharAt方法只能替换字符 哪些已经存在

是的,这就是原因

setCharAt
的Javadoc清楚地说明了这一点:

索引参数必须大于或等于0,小于 此序列的长度

为什么不在StringBuilder中使用
append
方法呢?在我看来,如果您的代码可以工作,它会在StringBuilder中留下漏洞,因为您只设置其他字符,而不设置中间的字符。使用
append
可以确保没有漏洞


这与“输出”被声明为空这一事实有关吗 首先,setCharAt方法只能替换字符 哪些已经存在

是的,这就是原因

setCharAt
的Javadoc清楚地说明了这一点:

索引参数必须大于或等于0,小于 此序列的长度


为什么不在StringBuilder中使用
append
方法呢?在我看来,如果你的代码可以工作,它会在StringBuilder中留下漏洞,因为你只设置其他字符,而不设置中间的字符。使用
append
可以确保没有漏洞。

“这与以下事实有关吗?”output“首先声明为空,setCharAt方法只能替换已经存在的字符?如果您有任何帮助,我们将不胜感激。”--是的,您确定
消息
不是空的吗?(即message.length应该大于0)?@ErwinBolwidt-谢谢你提供的信息,现在我知道我做错了什么。@Yazan-不,我肯定“message”不是空的。“这与“output”最初声明为空有关吗?setCharAt方法只能替换已经存在的字符?任何帮助都将不胜感激。”--是的,您确定
消息
不是空的吗?(即message.length应该大于0)?@ErwinBolwidt-谢谢您提供的信息,现在我知道我做错了什么。@Yazan-不,肯定是“消息”不是空的。谢谢。它成功了。我有什么方法可以改进这个程序吗?比如,有没有更简单的方法把字符串分成两半?谢谢。它成功了。我有什么方法可以改进这个程序吗?比如,有没有更简单的方法把字符串分成两半?对不起,我是Java的初学者,我经常以犯错误,然后阅读文档。谢谢你的回答!那么我什么时候应该使用setCharAt方法呢?当你已经添加了一个字符,然后你想更改它时,你可以使用setCharAt。但是-我从1995年开始就用Java编程,我从来没有使用过这个方法。YMMV对不起,我是Java的初学者,我经常n最后犯错误,然后阅读文档。谢谢你的回答!那么我什么时候应该使用setCharAt方法呢?当你已经添加了一个字符,然后你想更改它时,你可以使用setCharAt。但是-我从1995年开始就用Java编程,我从来没有使用过这个方法。YMMV