Java-子字符串存储到单独的字符串变量中
所以我有一个如下的字符串Java-子字符串存储到单独的字符串变量中,java,arrays,string,for-loop,Java,Arrays,String,For Loop,所以我有一个如下的字符串 "1: Command(1, 2, 3)" 我最终希望将1233存储到String变量中。我怎样才能做到这一点 下面是一段代码,用于读取字符串数组并尝试打印该字符串的参数 for (int i = 0; i < TableElements.length; i++) { if (sadTableElements[i] != null) { System.out.println("DEBUG " + sadTableElements[i]); P
"1: Command(1, 2, 3)"
我最终希望将1233存储到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);
}
}
for(int i=0;i
我得到这个输出:
调试1:线程“AWT-EventQueue-0”中的命令(1、2、3)1异常
java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:
-二,
它似乎在System.out.println(Param1)处停止代码>
TableElements[i].indexOf(“,”
为您提供第一个,
字符的索引,该索引低于从TableElements[i].indexOf(“,”)+2
获得的索引。这就是为什么会出现异常。最好使用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
注意:如果您对其进行了调整,请重新使用已编译的模式,不要对每个输入字符串重新编译
Param1 = Integer.parseInt(TableElements[i].substring(TableElements[i].indexOf(",") + 2, TableElements[i].indexOf(",")));
两个indexOf(…)表示完全相同的冒号。因此,您正在构建一个从索引+2到索引的子字符串。您可以使用split(…)函数,也可以将创建的子字符串保存在新字符串中。indexOf()函数在Java中返回匹配子字符串的第一个索引,因此
indexOf(“,”)将始终返回它在整个输入字符串中找到的第一个“,”的索引
i、 e.indexOf(“,”)将始终返回输入字符串中找到的第一个“,”的索引。要获取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);
函数的作用是:返回可能匹配项的最后一个索引,即返回第二个匹配项的索引,该索引应给出正确的输出
希望有帮助 手动计算应该由indexOf
返回的数字-将它们放入代码中,然后您将看到错误
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);