java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-4

时间:2017-07-04 06:27:20

标签: java

我有这个简单的Java代码,它会产生以下错误: java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-4

代码是:

String date = "14000101";
String repayDate = date.substring(0, 4)+"-"+date.substring(5, 2)+"-"+date.substring(6, 2);

字符串的长度为8,但从第二部分开始会出错。

有什么想法吗?

谢谢!

5 个答案:

答案 0 :(得分:2)

date.substring(5, 2)应为date.substring(5, 7)date.substring(6, 2)应为date.substring(6, 8)

第二个参数是所需子字符串的最后一个字符后面的字符索引。

答案 1 :(得分:1)

你是负值:

[API] [1]     [1]:http://www.w3api.com/wiki/Java:String.substring()

public String substring(int beginIndex)
public String substring(int beginIndex, int endIndex)

如果你将beginIndex降低到endIndex,那么崩溃。

你应该这样做:

String repayDate = date.substring(0, 4)+"-"+date.substring(5, 7)+"-"+date.substring(6, 8);

试试吧! 祝你好运。

答案 2 :(得分:0)

substring(int beginIndex, int endIndex) 

在您的代码中,endIndex小于beginIndex。查看this

beginIndex - the beginning index, inclusive.
endIndex - the ending index, exclusive.

IndexOutOfBoundsException - if the beginIndex is negative, or 
endIndex is larger than the length of this String object, or 
beginIndex is larger than endIndex.

答案 3 :(得分:0)

java与python ....有点不同。

这在doc

中反映无效
 substring(5, 2)

第二个整数必须大于第一个整数

if (endIndex > value.length) {
      throw new StringIndexOutOfBoundsException(endIndex);
}

如果你想在第一个参数之后获得2个字符,那么就像

那样
substring(5, 5 + 2);

甚至更好:

int beginIndex = 5;
String dateB = date.substring(beginIndex, beginIndex + 2);

答案 4 :(得分:0)

为java.lang.String.substring(int,int)读取javadoc

String date = "14000101";
    String repayDate = date.substring(0, 4)+"-"+date.substring(4, 6)+"-"+date.substring(6, 8);
    System.out.println(repayDate);