
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];
}
怎么解决呢? 展开
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];
}
怎么解决呢? 展开
展开全部
字符串的长度是6但是每个字符的下标是从0开始计算
所以charAt(i)中的i最大是字符串长度-1.
你在do while循环里有个i++,i 如果等于5的时候,在charAt(i)就明显越界了
所以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);
展开全部
最后一次越界了 b=wfhs.charAt(i);
追问
怎么才能不越界呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询