我知道要按括号拆分我需要使用\\[
符号,按照此主题:Split using a bracket
但是,我需要从[和]中获取令牌。
示例字符串是study[2]
,我需要获取令牌2
。
以下在Eclipse的表达式调试器中给出错误:
"study[2]".split("\\[\\]");
我应该使用另一个正则表达式吗?
答案 0 :(得分:2)
如果你真的想拆分,你必须做一组括号。
"study[2]".split("[\\[\\]]");
因为String难以阅读,所以再次使用没有Java转义的正则表达式
[\[\]]
这意味着,您有一个组(外部括号)包含两个元素[
和]
,每个元素都被转义。这意味着,分为[
或]
。根据这一点,"a]bc[1]2[][3"
之类的字符串将在每个括号中拆分,因此您获得a
,bc
,1
,2
,{{1} }。
如果你的问题比我在这里假设的更简单,那么@ user1766169的答案就不那么过分了。
答案 1 :(得分:1)
改为使用子字符串:
String testString = "study[2]";
int startIndex = testString.indexOf("[");
int endIndex = testString.indexOf("]");
String subString = testString.substring(startIndex+1, endIndex);
System.out.println(subString);
这将打印2。
答案 2 :(得分:1)
如果您需要使用[或]之一进行拆分,请使用
"study[2]".split("[\\[\\]]");
<强>输出: - 强>
study
2
如果您打算在括号内提取数字,请使用以下内容: -
Pattern p = Pattern.compile(".*\\[([0-9]+)\\].*");
Matcher m = p.matcher("study[2]");
System.out.println(m.matches());
System.out.println(m.group(1));
<强>输出: - 强>
true
2
注意: - 需要调用m.matches(),否则m.group(1)将调用 不会返回任何结果。
正则表达式字符串
.* - match any character 0 or more times
\\[ - an escaped [ character
( - open the braces to group items. These matched groups can be later re-used.
[0-9]+ - match any number.
) - grouping ends. Anything inside a group is accessible by calling group(1) (1 for the first group).
\\] - an escaped ] character
.*