java - 我找不到“java.lang.StringIndexOutOfBoundsException”错误的原因
问题描述
我的代码采用用户输入的第一个和最后一个单词并将它们转换为大写。但是,当用户输入“”或“java”(不带空格的单词)时,会弹出一个错误。我找不到错误的原因。
Scanner input = new Scanner(System.in);
String s = input.nextLine();
String first = "";
String last = "";
String end = s;
int count = 0;
for (int i = 0;i<s.length()-1;i++) {
if (s.charAt(i) == ' ') {
count++;
}
if (count == 0) {
end = s.toUpperCase();
}
else if (count > 0)
first = s.substring(0,s.indexOf(' '));
last = s.substring(s.lastIndexOf(' ')+1);
end = (first.toUpperCase() + " " + s.substring(first.length()+1,s.indexOf(last)) + " " +last.toUpperCase());
}
System.out.println(count);
解决方案
String first = s.substring(0,s.indexOf(' '));
String last = s.substring(s.lastIndexOf(' ')+1);
您在此处的代码导致了问题。String
如果您的then中不存在空格,indexOf(' ')
则将返回 -1。您显然不能在 0 和 -1 之间进行子字符串化。在子串之前,您需要检查是否' '
存在。String
推荐阅读
- android - 如何从协程返回异步操作到 ViewModel
- python - 转换后颜色失真
- android - Android Jetpack 组合渐变
- mysql - 在 phpMyAdmin 中使用 SHA256 设置用户密码后访问被拒绝
- node.js - 尝试使用 Winston 登录 StackDriver 时,Firebase Cloud Functions 不会部署
- prolog - 减少 Prolog 中的约束
- python - 将两个列表元素连接到一个 nxn 矩阵
- r - 从网络图中删除不需要的链接
- c# - 从另一个类追加时,RichTextBox 为空
- vue.js - 如何存储子组件发出的值?