2011-06-08 92 views
5

一个字符串我有一个字符串,如下分割使用Word分隔符

a > b and c < d or d > e and f > g 

结果必然是:

a > b 
and 
c < d 
or 
d > e 
and 
f > g 

我想字符串以“和”出现分裂,“或”和[我需要它们来评估表达式]

我试过使用StringTokenizer作为

new StringTokenizer(x, "\\sand\\s|\\sor\\s", true); 

但我没有得到期望的结果。 我尝试使用扫描仪

Scanner sc = new Scanner(x); 
     sc.useDelimiter("and | or"); 

这是它能够分割,但犯规返回的分隔符。

请建议。

我已经给出了上面的a,b,c,但是在那里cud是单词而不是a,b,c和空格。 已更新的示例。

+0

你的描述意味着使用字符串“和”&“或”作为分隔符,但您的输出暗示“”作为分隔符。请澄清。 – djg 2011-06-08 21:43:38

+0

doh!我给不好的例子作为string..let我提供了另一个例子 – jch 2011-06-08 21:45:46

+0

http://stackoverflow.com/questions/3777546/how-can-i-split-a-string-in-java-and-retain-the-delimiters – JustinKSU 2011-06-08 22:07:04

回答

2
String delim = " "; 
String[] splitstrings = yourString.split(delim); 
for (int i = 0; i < splitstrings.length(); i++) { 
    splitstrings += delim; 
} 
+0

OP想要返回分隔符。 'split'不会返回分隔符。 – CoolBeans 2011-06-08 21:41:44

+0

我ddint解释清楚..我已经更新了现在的例子。 – jch 2011-06-08 21:48:08

+0

对不起,但我不认为这是正确的。 – jch 2011-06-08 21:57:33

2

你真正想要的是你碰到空格的所有不同的排列和你的语法生长的时间像JFlex的工具。从长远来看,你会节省时间。

3

这将分割“和”或“或”与周围的任何数量的空间单词。

String test = "2 < 3 and 3 > 2 or 4 < 6 and 7 < 8"; 

    String [] splitString = test.split("\\s*[and|or]+\\s*"); 
    for(int i = 0; i < splitString.length ; i ++){ 
     System.out.println(splitString[i]); 
    } 

输出

2 < 3 
3 > 2 
4 < 6 
7 < 8 
+0

如何获取分隔符? – jch 2011-06-08 22:34:29

0

一个的StringTokenizer是唯一的Java标准类,它是能够使用的分隔符,以及据我所知回来的。单从OT复制的正则表达式假设它会做他想做的(这在第二眼我非常怀疑从他的文字描述,但哦 - 只需插入正确的)

String input = "a > b and c < d or d > e and f > g"; 
    StringTokenizer tokenizer = new StringTokenizer(input, "\\sand\\s|\\sor\\s", true); 
    while (tokenizer.hasMoreTokens()) { 
     System.out.println(tokenizer.nextToken()); 
    }