为什么我的字符串按正则表达式拆分不起作用?
Why is my String splitting by a regex not working?
我有一个输入字符串,例如“5+3”。
现在我想用正则表达式拆分它:
String[] rawTokens = input.split("\+|\-|\*|/|\d+");
标记数组现在应该是 [5, +, 3] 但它是空的。
有什么问题?
要拆分您可以使用的字符串:
"\+|\*|/|-|\d+"
或
"\d+|[+*/-]"
try {
String input = "5+3";
ArrayList<String> list = new ArrayList<String>();
Pattern pattern = Pattern.compile("\+|\*|/|-|\d+");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
list.add(matcher.group());
}
String[] rawTokens = list.toArray(new String[0]);
JOptionPane.showMessageDialog(null, rawTokens);
} catch (PatternSyntaxException ex) {
}
问题有三方面:
- 与传递给 split 的模式匹配的输入被 消耗(丢弃),匹配之间剩下的内容作为数组返回
- 您的模式匹配输入的每个字符,所以它全部消耗(丢弃)只留下空白(零长度字符串)来填充数组
- 从返回的数组中自动截断尾随空白
那么,如何解决...
您需要一个 不 匹配任何输入字符的模式,因为您不想消耗任何内容。相反,您需要匹配 between 要提取的术语。你需要四处看看:
String[] rawTokens = input.split("\b");
此模式匹配 "word boundaries"(在本例中为非数字和数字之间,反之亦然)。
查看 live demo 生成您想要的输出。
我有一个输入字符串,例如“5+3”。 现在我想用正则表达式拆分它:
String[] rawTokens = input.split("\+|\-|\*|/|\d+");
标记数组现在应该是 [5, +, 3] 但它是空的。
有什么问题?
要拆分您可以使用的字符串:
"\+|\*|/|-|\d+"
或
"\d+|[+*/-]"
try {
String input = "5+3";
ArrayList<String> list = new ArrayList<String>();
Pattern pattern = Pattern.compile("\+|\*|/|-|\d+");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
list.add(matcher.group());
}
String[] rawTokens = list.toArray(new String[0]);
JOptionPane.showMessageDialog(null, rawTokens);
} catch (PatternSyntaxException ex) {
}
问题有三方面:
- 与传递给 split 的模式匹配的输入被 消耗(丢弃),匹配之间剩下的内容作为数组返回
- 您的模式匹配输入的每个字符,所以它全部消耗(丢弃)只留下空白(零长度字符串)来填充数组
- 从返回的数组中自动截断尾随空白
那么,如何解决...
您需要一个 不 匹配任何输入字符的模式,因为您不想消耗任何内容。相反,您需要匹配 between 要提取的术语。你需要四处看看:
String[] rawTokens = input.split("\b");
此模式匹配 "word boundaries"(在本例中为非数字和数字之间,反之亦然)。
查看 live demo 生成您想要的输出。