为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕虎7371278 2023-12-13 15:14:43
我一直在研究一种生成密码的方法,该方法会将每个“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)
查看完整描述

3 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

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



查看完整回答
反对 回复 2023-12-13
?
Helenr

TA贡献1780条经验 获得超3个赞

您接受phrase.indexOf('S')一个字符串而不检查返回值。如果没有匹配,该方法返回-1。然后,您使用该索引作为子字符串的上限,这会导致程序崩溃。

如果我正确理解你想要做什么,即使你得到了正确的算法,你也会想要一个不同的算法。没有理由既在字符串中搜索所需字符的每次出现,又编写一个将长度减 1 的循环。此外,如果可能,请避免复制长数组和字符串。


查看完整回答
反对 回复 2023-12-13
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

我不确定这是否是正确的方法。但是,我发现添加 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;

            }

    }```


查看完整回答
反对 回复 2023-12-13
  • 3 回答
  • 0 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信