Java 获取错误“;字符串索引超出范围:0“;浅谈字符串生成器的使用
这是我用Java编写的代码(用于返回字符串的两个部分-一个是奇数部分,从索引0或第一个字符开始,另一个是从索引1或第二个字符开始):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
公共类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