Java 如何修复超出范围的字符串索引:-1
我一直在研究一种生成密码的方法,它可以将每个“S”都更改为$ 注意,我从另一个类中获取短语,它将始终大于8个字符Java 如何修复超出范围的字符串索引:-1,java,string,Java,String,我一直在研究一种生成密码的方法,它可以将每个“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(p
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)
索引超出范围异常值-1表示未找到请求的符号,在本例中为S。索引超出范围异常值-1表示未找到请求的符号,在本例中为S。在字符串上使用
短语.indexOf('S')
,而不检查返回值。如果没有匹配项,则该方法返回-1
。然后使用此索引作为子字符串的上限,这会使程序崩溃
如果我正确地理解了你想做的事情,即使你做得正确,你也会想要一个不同的算法。没有理由在字符串中搜索所需字符的每个匹配项,也没有理由编写一个循环,将长度递减1。另外,尽可能避免复制长数组和字符串。在字符串上使用
短语.indexOf('S')
,而不检查返回值。如果没有匹配项,则该方法返回-1
。然后使用此索引作为子字符串的上限,这会使程序崩溃
如果我正确地理解了你想做的事情,即使你做得正确,你也会想要一个不同的算法。没有理由在字符串中搜索所需字符的每个匹配项,也没有理由编写一个循环,将长度递减1。此外,如果可能,请避免复制长数组和字符串
我不确定这样做是否正确。然而,我发现添加if语句实际上修复了这段代码,并在索引变为-1时停止for循环
我不确定这样做是否正确。然而,我发现添加if语句实际上修复了这段代码,并在索引变为-1时停止for循环
当子字符串中没有
S
时,phrase.indexOf('S')
返回什么?索引越界异常是由一个原因引起的,即使用的索引超出了正在迭代的列表/数组/集合的界限。使用调试器找出代码超出限制的位置(低于有效的起始索引或高于最大索引)。如果(sKey!=-1)在更改存储之前将修复您的问题短语有什么作用。当子字符串中没有S
时,indexOf('S')
返回?索引越界异常是由一件事引起的,它使用的索引超出了正在迭代的列表/数组/集合的范围。使用调试器找出代码超出限制的位置(低于有效起始索引或高于最大索引)。如果(sKey!=-1)在更改存储将修复您的问题之前,请确认您一直在调试器中看到这种情况,但一小时后,我想到制作一条if语句来捕获这种情况以防止错误。感谢您一直在调试器中看到这种情况,但一小时后,我想到制作一条if语句来捕获这种情况以防止错误。
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;
}
}```