java - 我找不到 "java.lang.StringIndexOutOfBoundsException"错误的原因

标签 java string for-loop

我的代码获取用户输入的第一个和最后一个单词并将它们转换为大写。但是,当用户输入“”或“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 中不存在空格,则 indexOf(' ') 将返回 -1。显然你不能在 0 和 -1 之间进行子串。在对字符串进行子串之前,您需要检查 ' ' 是否存在于 String 中。

关于java - 我找不到 "java.lang.StringIndexOutOfBoundsException"错误的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55641122/

相关文章:

java - String.split 导致最后一个索引换行

html - 如何使用 Django 在 HTML 中显示多个对象的列表,一个在另一个下面?

java - HashMap 如何以及何时初始化 EntrySet 并向其中添加值

python - 对 "if .... in .."语句使用通配符

java - Apache 配置单元 : Unable to instantiate org. apache.hadoop.hive.metastore.HiveMetaStoreClient

c# - 在@字符串中添加双引号

java - 循环内的数据库调用有其他选择吗?

java - 这可以持续做某事吗?

java - Eclipse 中通用类型的自动完成

java - 带 Spring 启动的 Keyvault MSI : How to config keyvault to use Azure cli credentials instead of managed identity while running on local?