java.lang.StringIndexOutOfBoundsException报错:打印第7个字符失败求助
解决java.lang.StringIndexOutOfBoundsException报错问题
咱们先拆解下你遇到的问题:
为啥会报错?
首先看你的代码和运行命令:
你用了input.next()读取输入,但这个方法只会读取空格前的内容。你运行时输入的是hello world,input.next()只拿到了hello——这个字符串只有5个字符,而你要取索引7的字符,肯定越界了。
另外还有个容易踩的坑:Java里字符串的索引是从0开始计数的,就算你输入了足够长的字符串,“第7个字符”对应的索引应该是6,而不是7,这也是导致报错的潜在原因哦。
怎么修复?
如果你需要读取带空格的整行输入
把input.next()换成input.nextLine(),这样就能获取完整的输入内容,同时记得加长度检查避免越界:
import java.util.Scanner; public class s { public static void main(String[] args) { Scanner input = new Scanner(System.in); String string = input.nextLine(); // 读取整行输入,包含空格 // 先判断字符串长度够不够,再访问索引 if (string.length() >= 7) { System.out.println(string.charAt(6)); // 第7个字符对应索引6 } else { System.out.println("输入的字符串长度不足7个字符哦"); } input.close(); // 记得关闭Scanner } }
如果你只需要读取单个无空格的单词
那运行时要输入至少7个字符的单词,同时修正索引并加上长度检查:
import java.util.Scanner; public class s { public static void main(String[] args) { Scanner input = new Scanner(System.in); String string = input.next(); if (string.length() >= 7) { System.out.println(string.charAt(6)); } else { System.out.println("输入的单词长度不够7个字符哦"); } input.close(); } }
小提醒
- 每次访问字符串索引前,一定要先检查字符串的长度,这是避免这类越界异常的好习惯。
- 牢记Java字符串索引从0开始:第1个字符是索引0,第N个字符就是索引
N-1。
内容的提问来源于stack exchange,提问作者Adam Amer
相关产品推荐
相关产品推荐

