我有这个简单的Java代码,它会产生以下错误: java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-4
代码是:
String date = "14000101";
String repayDate = date.substring(0, 4)+"-"+date.substring(5, 2)+"-"+date.substring(6, 2);
字符串的长度为8,但从第二部分开始会出错。
有什么想法吗?
谢谢!
答案 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);