我是开发人员的新手,现在在.substring
中获得了一个超出界限的例外length = 40,startRegion = 21,regionLength = -15
该字符串为40个字符,并由条形码阅读器扫描。条形码是(01)90000055097706(3103)018130(10)24022402(30)00。
扫描时显示为0190000055097706310301813010240224023000
请帮忙。
编辑:寻找字符串的018130部分。感谢您指出startIndex,endIndex。这就是我所缺少的,认为语法是startIndex,长度。
再次感谢。
String scannedAmount = scanAmount.getText().toString();
if(scannedAmount.length() > 10)
{
scannedAmount = scannedAmount.substring(21, 6); // removes only the weight value in the string
barcodeAmount = parseDouble(scannedAmount);
barcodeAmount = barcodeAmount * conversion;//changes the weight from kg to lb
} else if(scannedAmount.length()<=10) {
barcodeAmount = parseDouble(scannedAmount);
}
答案 0 :(得分:0)
scansAmount = scansAmount.substring(21,6);
String substring end index错误。下面是jdk代码。你的结束索引应该大于开始索引。
<pre>int subLen = endIndex - beginIndex;
if (subLen < 0) {
throw new StringIndexOutOfBoundsException(subLen);
}
</pre>
答案 1 :(得分:0)
如oracle文档网站上所列,这是子字符串的工作原理:
public String substring(int beginIndex, int endIndex)
返回一个新字符串,该字符串是此字符串的子字符串。子串 从指定的beginIndex开始并延伸到at处的字符 index endIndex - 1.因此子字符串的长度是 endIndex的-的beginIndex。
示例:
"hamburger".substring(4, 8) returns "urge" "smiles".substring(1, 5) returns "mile"
您需要将第一个索引作为第一个参数传递,将第二个索引作为第二个参数传递。
抛出stringOutOfBoundsException是因为你试图在-15索引处索引字符串(6 - 21)。
将您的代码更改为:
scannedAmount = scannedAmount.substring(6, 21);
你不会再从这一行得到例外。
至于代码的功能,我不会说话,因为你没有给出应该发生的事情的任何背景。
答案 2 :(得分:0)
我相信您更熟悉的语法是C#,即substring(startIndex, lengthOfSubstring)
,但在java中,正确的语法是
substring(startIndex, endIndex)
返回的String
是字符串的一部分,从startIndex
开始直到endIndex
(不包括在内)。因此,如果您希望从索引21
开始的字符串中包含六个字符,那么
scannedAmount = scannedAmount.substring(21, 27);