所以我有一个类似下面的字符串
"1: Command(1, 2, 3)"
我最终希望将1 2 3存储到String
个变量中。我怎么能做到这一点?
以下是一段代码,它读取字符串数组并尝试打印出该字符串的参数。
for (int i = 0; i < TableElements.length; i++) {
if (sadTableElements[i] != null) {
System.out.println("DEBUG " + sadTableElements[i]);
Param0 = Integer.parseInt(TableElements[i].substring(TableElements[i].indexOf("(") + 1,
TableElements[i].indexOf(",")));
System.out.println(Param0);
Param1 = Integer.parseInt(TableElements[i].substring(TableElements[i].indexOf(",") + 2,
TableElements[i].indexOf(",")));
System.out.println(Param1);
Param2 = Integer.parseInt(TableElements[i].substring(TableElements[i].indexOf(",") + 2,
TableElements[i].indexOf(")")));
System.out.println(Param2);
}
}
我得到了这个输出:
DEBUG 1:命令(1,2,3)1线程“AWT-EventQueue-0”中的异常 java.lang.StringIndexOutOfBoundsException:字符串索引超出范围: -2
似乎停在System.out.println(Param1);
答案 0 :(得分:1)
Param1 = Integer.parseInt(TableElements[i].substring(TableElements[i].indexOf(",") + 2, TableElements[i].indexOf(",")));
TableElements[i].indexOf(",")
为您提供第一个,
字符的索引,该字符低于从TableElements[i].indexOf(",") + 2
获得的索引。这就是你得到例外的原因。
答案 1 :(得分:1)
也许最好使用regexp:
java.util.regex.Matcher m = java.util.regex.Pattern.compile("^\\d+: Command\\((\\d+), (\\d+), (\\d+)\\)").matcher("1: Command(1, 2, 3)");
if (!m.matches()) {
throw new AssertionError("Your Regex Pattern or Input is bad");
}
System.out.println(m.group(1) + " | " + m.group(2) + " | " + m.group(3));
这里的输出是:1 | 2 | 3
注意:如果您对其进行了调整,请重新使用已编译的模式,不要为每个输入字符串重新编译它
答案 2 :(得分:1)
Param1 = Integer.parseInt(TableElements[i].substring(TableElements[i].indexOf(",") + 2, TableElements[i].indexOf(",")));
indexOf(...)都指向完全相同的冒号。所以你要构建一个从索引+ 2到索引的子字符串。您可以使用split(...)函数或将创建的子字符串保存在新字符串中。
答案 3 :(得分:1)
indexOf()函数返回匹配子字符串的第一个索引 indexOf(&#34;,&#34;)将始终返回第一个&#34;,&#34;的索引。它在整个输入字符串中找到。
即。 indexOf(&#34;,&#34;)将始终返回第一个&#34;,&#34;的索引。在输入字符串中找到。要获取Param1和Param2,请尝试使用以下代码:
Param0 = Integer.parseInt(TableElements[i].substring(TableElements[i].indexOf("(") + 1, TableElements[i].indexOf(",")));
System.out.println(Param0);
Param1 = Integer.parseInt(TableElements[i].substring(TableElements[i].indexOf(",") + 2, TableElements[i].lastIndexOf(",")));
System.out.println(Param1);
Param2 = Integer.parseInt(TableElements[i].substring(TableElements[i].lastIndexOf(",") + 2, TableElements[i].indexOf(")")));
System.out.println(Param2);
lastIndexOf()函数返回可能匹配的最后一个索引,即它将返回第二个匹配的索引&#34;,&#34;哪个应该给出正确的输出。
希望有所帮助!