亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何修復字符串索引超出范圍:-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條經驗 獲得超4個贊

您接受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 關注
  • 215 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號