如何修复字符串索引超出范围:-1

我一直在研究一种生成密码的方法,该方法会将每个“S”更改为$。


请注意,我从另一个类中获取该短语,它始终大于 8 个字符


    String key;

    String store;

    key = phrase.substring(0,1).toUpperCase();

    phrase = key + phrase.substring(1,phrase.length());

    System.out.println(phrase);

    System.out.println(phrase.length());

    for(int i = phrase.length(); i>0; i--) {

        int sKey = phrase.indexOf('S');

        store = "$" + phrase.substring(sKey+1,phrase.length());

        phrase =phrase.substring(0,sKey)+store;

        System.out.print(phrase);

    }

}

但是之后我总是收到此错误


Exception in thread "main" Te$taaaajava.lang.StringIndexOutOfBoundsException: String index out of range: -1

    at java.lang.String.substring(Unknown Source)

    at edu.ilstu.Security.generatePassword(Security.java:15)

    at edu.ilstu.SecurityApp.main(SecurityApp.java:57)


慕虎7371278
浏览 129回答 3
3回答

慕尼黑8549860

索引超出范围异常值 -1 表示未找到请求的符号(在本例中为 S)。

Helenr

您接受phrase.indexOf('S')一个字符串而不检查返回值。如果没有匹配,该方法返回-1。然后,您使用该索引作为子字符串的上限,这会导致程序崩溃。如果我正确理解你想要做什么,即使你得到了正确的算法,你也会想要一个不同的算法。没有理由既在字符串中搜索所需字符的每次出现,又编写一个将长度减 1 的循环。此外,如果可能,请避免复制长数组和字符串。

繁星点点滴滴

我不确定这是否是正确的方法。但是,我发现添加 if 语句实际上修复了此代码,并在索引变为 -1 时停止 for 循环    String key;    String store;    key = phrase.substring(0,1).toUpperCase();    phrase = key + phrase.substring(1,phrase.length());    for(int i = phrase.length(); i>0; i--) {            int sKey = phrase.indexOf('S');            if(sKey >= 0) {            store = "$" + phrase.substring(sKey+1,phrase.length());            phrase =phrase.substring(0,sKey)+store;            }else {                i=0;            }    }```
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java