我正在尝试将long转换为字符串,然后根据字符串索引在字符串中查找某个数字。
我收到此错误:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException:
String index out of range: 0
at java.lang.String.charAt(Unknown Source)
at TestFile.main(TestFile.java:12)
为什么这不起作用?我以为我理解substring
,但我想我不知道。
此外,如果我将其更改为substring((i-2), (i-1))
,我会得到一个与长期非常不同的数字。但我不会再犯错了。
import java.util.*;
public class TestFile {
public static void main(String args[]) {
long hello = 22L;
// System.out.println(HW3.sumOfDoubleEvenPlace(hello));
String strLong = Long.toString(hello);
int i = strLong.length();
System.out.println(i);
int temp;
String strLongcut = strLong.substring((i-2), (i-2));
temp = Integer.valueOf(strLongcut.charAt(0));
System.out.println(temp);
}
}
所以我才意识到substring
的第二部分是我想要的部分的长度,而不是索引。
我仍然无法正确回报我的长期价值。
感谢您的帮助!
答案 0 :(得分:0)
substring
方法如下:
myString.substring(indexOfFirstCharacterInTheSubstring,
indexOfLastCharacterInSubstring + 1);
因此,通过使两个参数成为相同索引,您所拥有的是创建长度为0的子字符串,该子字符串甚至没有索引0(如果它的长度为> = 1),从而产生错误。
答案 1 :(得分:0)
你有一个空字符串(不包含任何字符),你试图从中获取第一个字符。它没有第一个字符(因为它有 no 字符),因此charAt
会抛出异常。
在substring
中,第一个参数是子字符串开始的索引,第二个参数是它结束的位置。 (例如,2表示“在索引2处的字符之前”)。
在您的代码中,i
包含2,因此i-2
为0. strLong
包含"22"
。
你调用"22".substring(0, 0)
,它返回在第一个字符(索引0)之前开始,在第一个字符之前结束的子字符串。
substring starts here
v
2 2
^
substring ends here
显然,这不包含任何字符,因此substring
会返回空字符串""
。