2015-04-15 139 views
0

我想转换长字符串,然后根据字符串索引找到字符串中的某个数字。长转换为字符串错误,与使用子字符串

我得到这个错误:

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

子串的长度是secondArgument - firstArgument – Aderis

回答

0

substring方法去如下:

myString.substring(indexOfFirstCharacterInTheSubstring, 
        indexOfLastCharacterInSubstring + 1); 

所以,你有什么通过使两个参数相同的索引是创建长度为0的字符串,它甚至没有一个指标0(如果做到了长度> = 1),因此也是错误。

+0

非常感谢! – Connor

0

您有一个空字符串(不包含字符),并尝试从中获取第一个字符。它没有第一个字符(因为它有没有个字符),所以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返回空字符串""

+0

非常感谢! – Connor