java中charAt();的越界问题

importjava.io.*;publicclasstest{staticinti=0;staticStringwfhs;staticcharb;publicstati... import java.io.*;
public class test
{
static int i=0;
static String wfhs;
static char b;
public static void main(String args[]) throws IOException
{
System.out.println("请输入:");
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
String wfhs=reader.readLine();
b=wfhs.charAt(i);
if(Character.isDigit(b))
{
do
{
System.out.println(b+"love");
i++;
b=wfhs.charAt(i);
System.out.println(b+"love");
}
while(Character.isDigit(b));
}
else
{
System.out.println("出错");
}
}
}

运行后显示

请输入:
123456
1love
Exception in thread "main" 2love
2love
3love
3love
4love
4love
5love
5love
6love
6love
java.lang.StringIndexOutOfBoundsException: String index out of range: 6
at java.lang.String.charAt(String.java:658)
at test.main(test.java:19)

其中String.java:658的内容是
public char charAt(int index) {
if ((index < 0) || (index >= value.length)) {
throw new StringIndexOutOfBoundsException(index);
}
return value[index];
}

怎么解决呢?
展开
 我来答
简讯快递
2013-04-29 · TA获得超过1202个赞
知道小有建树答主
回答量:1926
采纳率:33%
帮助的人:532万
展开全部
字符串的长度是6但是每个字符的下标是从0开始计算
所以charAt(i)中的i最大是字符串长度-1.
你在do while循环里有个i++,i 如果等于5的时候,在charAt(i)就明显越界了
追问
怎么才能不越界呢?
追答
改循环条件
do
{
System.out.println(b+"love");
i++;
b=wfhs.charAt(i);
System.out.println(b+"love");
}
//此处-------------加条件
while(Character.isDigit(b)&&i<wfhs.length()-1);
扰龙家076
2013-04-29
知道答主
回答量:48
采纳率:0%
帮助的人:21.9万
展开全部
这个肯定要下标越界了,当i=5的时候,也就是走到最后一个数字,再让i++;i就变为6,可是那个字符串的长度是6,i=6就是要去第七位的字符,肯定没有,所以报错。你主要想干什么,看你思维好混乱。
追问

我主要要实现这个部分

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2013-04-29 · TA获得超过1243个赞
知道小有建树答主
回答量:2126
采纳率:55%
帮助的人:692万
展开全部
最后一次越界了 b=wfhs.charAt(i);
追问
怎么才能不越界呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式