如何在Java中拆分布尔表达式?例如,我想从表达式a_1 & b_2 | (!c_3)中获得以下内容
String tokens[] = {"a_1", "&", "b_2", "|", "(", "!", "c_3", ")"};变量名称包含字母数字字符和下划线(_)。
发布于 2011-01-04 21:27:45
如果你有
String str = "a & b | (!c)";首先,去掉空格:
String str2 = str.replaceAll(" ", "");然后,获取所需的数组,如下所示:
String[] array = str2.split("");更新:基于OP的更改问题,另一个解决方案如下:
String str = "a_1 & b_2 | (!c_3)"; // initial string
StringCharacterIterator sci = new StringCharacterIterator(str); // we use a string iterator for iterating over each character
List<String> strings = new ArrayList<String>(); // this will be our array of strings in the end
StringBuilder sb = new StringBuilder(); // a string builder for efficiency
for(char c = sci.first(); c != sci.DONE; c = sci.next()) {
if( c == ' ' ) {
continue; // we ignore empty spaces
}
else if(
c == '&' ||
c == '(' ||
c == ')' ||
c == '|' ||
c == '!')
{
// if we stumble upon one of 'tokens', we first add any previous strings that are variables to our string array, then add the token and finally clean our StringBuilder
if(sb.length() != 0) strings.add(sb.toString());
strings.add(String.valueOf(c));
sb = new StringBuilder();
}
else {
sb.append(c); // we have a character that's part of a variable
}
}
String[] finalArray = strings.toArray(new String[0]); // we turn our list to an array
for (String string : finalArray) {
System.out.println(string); // prints out everything in our array
}发布于 2011-01-04 21:33:51
如果您想要解析字符串--可能是create a syntax tree并计算表达式-,那么最好使用一个简单的switch表达式来解析字符串:
// for each char c in String
switch (c) {
case '&': processAnd();break;
case '|': processOr();break;
case '!': processNot();break;
case '(': processOpenPara();break;
case ')': processClosePara();break;
case ' ': break;
default: processVarName(); break;
}这只是一个显示模式的存根。您可能希望使用堆栈来计算表达式。
https://stackoverflow.com/questions/4594083
复制相似问题