我是java的新手,所以我希望你能帮助我:
我有一个字符串,我试图分成两个元素。我正在尝试使用子字符串,但到目前为止它不起作用。这是我尝试过的:
public class StreamCipher {
String first = "315c4eeaa8b5f8aaf9174145bf43e1784b8fa00dc71d885a804e5ee9fa40b16349c146fb778cdf2d3aff021dfff5b403b510d0d0455468aeb98622b137dae857553ccd8883a7bc37520e06e515d22c954eba5025b8cc";
public void stringToList() {
List<String> xorList = new ArrayList<String>();
for (int i = 0; i <= first.length(); i+=2) {
String subXOR = first.substring(i, i+2);
xorList.add(subXOR);
}
}
System.out.println(xorList);
}
然而,这个错误不断出现:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 174
在这一行:
String subXOR = first.substring(i, i+2);
有什么问题?
答案 0 :(得分:2)
尝试替换它:
for (int i = 0; i <= first.length(); i+=2) {
使用<
代替<=
:
for (int i = 0; i < first.length(); i+=2) {
答案 1 :(得分:2)
正在查看的问题是,即使i等于字符串长度的长度,也会执行语句first.substring(i, i+2);
所以你应该做的是
public void stringToList() {
List<String> xorList = new ArrayList<String>();
for (int i = 0; i <= first.length(); i+=2) {
if((i+2)<first.length()){
String subXOR = first.substring(i, i+2);
xorList.add(subXOR);
}
}
}
System.out.println(xorList);
}
这样你就可以确定i + 2的值总是小于字符串文字的长度