2017-07-04 139 views
0

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

代码是:

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

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

任何想法?

谢谢!

+1

阅读javadoc为java.lang.String.substring(int,int) – JIV

+0

根据doc;抛出'IndexOutOfBoundsException' - 如果beginIndex或endIndex为负数,如果endIndex大于length(),或者beginIndex大于startIndex –

+0

substring方法的第二个参数不是子字符串的结尾位置,而是第几个参数。所以,你想要的东西如:日期。substring(0,4)+“ - ”+ date.substring(5,7)+“ - ”+ date.substring(6,8); – jolumg

回答

2

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

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

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. 
0

Java是一种给蟒不同....

这是无效的,因为反映在doc

substring(5, 2) 

第二整数必须比第一个

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

如果您的意思是获得2个字符af之三的第一个参数,然后像做

substring(5, 5 + 2); 

甚至更​​好:

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

读的javadoc java.lang.String.substring(INT,INT)

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

你是givin负值:

[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); 

试试吧! 祝你好运。

相关问题