Stream 版本:
import java.util.List;
import java.util.regex.MatchResult;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Stream.of(
"testnames[3]",
"3alpha[0]",
"beta[4]value[2]",
"gama4[23]",
"tama[2334]",
"tes[t[",
"try[]t"
).forEach(s -> System.out.println(s + " => " + getTokens(s)));
}
static List<String> getTokens(String str){
return Pattern.compile("(\\w+(?:\\[\\d+\\]\\w+)?)(?=\\[\\d+\\])|(?<=\\[)\\d+(?=\\])")
.matcher(str)
.results()
.map(MatchResult::group)
.collect(Collectors.toList());
}
}
输出:
testnames[3] => [testnames, 3]
3alpha[0] => [3alpha, 0]
beta[4]value[2] => [beta[4]value, 2]
gama4[23] => [gama4, 23]
tama[2334] => [tama, 2334]
tes[t[ => []
try[]t => []
regex101 正则表达式的解释:
非Stream版本:
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String [] arr = {
"testnames[3]",
"3alpha[0]",
"beta[4]value[2]",
"gama4[23]",
"tama[2334]",
"tes[t[",
"try[]t"
};
for(String s: arr) {
System.out.println(s + " => " + getTokens(s));
}
}
static List<String> getTokens(String str){
Pattern pattern = Pattern.compile("(\\w+(?:\\[\\d+\\]\\w+)?)(?=\\[\\d+\\])|(?<=\\[)\\d+(?=\\])");
Matcher matcher = pattern.matcher(str);
List<String> list = new ArrayList<>();
while(matcher.find()) {
list.add(matcher.group());
}
return list;
}
}
输出:
testnames[3] => [testnames, 3]
3alpha[0] => [3alpha, 0]
beta[4]value[2] => [beta[4]value, 2]
gama4[23] => [gama4, 23]
tama[2334] => [tama, 2334]
tes[t[ => []
try[]t => []