【发布时间】:2016-07-31 06:12:34
【问题描述】:
我有一个类似
的字符串a+(b * 6)
我正在尝试提取变量a, b, cat, dog。下面是我的代码。
Set<String> varList = null;
StringBuilder sb = null;
String expression = "a+(b * 6) <= cat*45 && cat = dog";
if (expression!=null)
{
sb = new StringBuilder();
//list that will contain encountered words,numbers, and white space
varList = new HashSet<String>();
Pattern p = Pattern.compile("[A-Za-z\\s]");
Matcher m = p.matcher(expression);
//while matches are found
while (m.find())
{
//add words/variables found in the expression
sb.append(m.group());
}//end while
//split the expression based on white space
String [] splitExpression = sb.toString().split("\\s");
for (int i=0; i<splitExpression.length; i++)
{
varList.add(splitExpression[i]);
}
}
Iterator iter = varList.iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
我得到的输出是:
ab
cat
dog
需要的输出:
a
b
cat
dog
在这种情况下,变量可能会也可能不会被空格分隔。当有空白时,输出是好的。但如果变量没有用空格分隔,我得到错误的输出。有人可以建议我正确的Pattern 吗?
【问题讨论】:
-
有趣的问题:)
标签: java regex pattern-matching