使用子字符串将long转换为字符串错误

时间:2015-04-15 01:52:42

标签: java string substring long-integer

我正在尝试将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的第二部分是我想要的部分的长度,而不是索引。

我仍然无法正确回报我的长期价值。

感谢您的帮助!

2 个答案:

答案 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会返回空字符串""