2011-06-03 28 views
0

字符串我需要关于如何在Java中 分裂与算术运算符和函数的字符串的例子字符串一些指导:分裂与算术运算符和函数的Java

"string1"+"String2" >= 10 * function1()/function2() 

运营商可能是:

+ - */**/%/() = != > < <= >= 

拆分 后,我需要像输出:

array[0]=string1 
array[1]=string2 
array[2]=10 

我只需要双引号和内容或数字中的东西,而不是函数(function1())或运算符。

我需要这个问题的正则表达式

+0

尽管可能用正则表达式来实现这一点 - 为什么不看JLex这样的东西来构建一个词法分析器? – Liv 2011-06-03 11:41:19

回答

1

如果你需要双引号和数字里提取的东西正则表达式,那么你可以使用这个java代码:

public static void main(String[] args) { 
    Pattern p = Pattern.compile("\"(\\w+)\"|\\b\\d+\\b"); 
    Matcher m = p.matcher(
     "\"string1\"+\"String2\" >= 10 * function1()/function2()"); 
    List<String> parts = new ArrayList<String>(); 
    while (m.find()) { 
     if (m.group(1) != null) 
      parts.add(m.group(1)); 
     else 
      parts.add(m.group(0)); 
    } 
    System.out.println(Arrays.toString(parts.toArray(new String[] {})));   
} 

,输出:

[string1, String2, 10] 

注:我不是确定regex是这种情况下最好的工具。正如其他人所建议的,您可能需要调查解析器的使用。

+0

感谢您的代码,我需要输出像string1,string2,10没有双引号。你能为此吗? – Selva 2011-06-06 03:18:59

+0

@ user782482:我修改了我的代码以解决您的请求。我希望这有帮助。 – MarcoS 2011-06-06 06:20:21

+0

是的,它工作正常。还有更多的帮助,如果我想在该数组中的函数意味着我应该怎么做?例如[string1,string2,10,function1(),function2()] – Selva 2011-06-06 07:43:15

2

我推荐创建一个解析器,使用的JavaCC也许蒸谷米 https://github.com/sirthias/parboiled/wiki/(没有尝试过一个尚未)

+0

我喜欢JavaCC的想法,虽然它可能太重,因为没有语法涉及,所以只需一个词法分析器即可。 +1然而;) – Liv 2011-06-03 11:43:25

3

您可以从字符串中删除所有的运营商,然后匹配除了跟到底()串应有尽有。

+1

删除操作符时,使用特殊字符,然后使用特殊字符分割字符串。 – Rasika 2011-06-03 11:44:54