使用Word分隔符拆分字符串

时间:2011-06-08 21:35:23

标签: java string-matching

我有一个字符串如下

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

结果必须是:

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

我想在“and”,“或”的出现时拆分字符串,并检索delim以及令牌。[我需要它们来评估表达式]

我尝试使用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和空格。 更新的例子。

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

当您遇到白色空间的所有不同排列以及语法增长时,您真正想要的是像JFlex这样的工具。从长远来看,你会节省时间。

答案 3 :(得分:0)

StringTokenizer是唯一能够返回已使用分隔符的java标准类,就我所知。刚从旧约中复制了正则表达式,假设它会按照自己的意愿行事(第二眼就是我对他的文字描述非常怀疑,但是哦 - 好吧 - 只需插入正确的一个)

    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());
    }

答案 4 :(得分:0)

String str = "2 < 3 and 3 > 2 or 4 < 6 and 7 < 8";
System.out.println( ImmutableList.copyOf( str.split( "(?=and|or)" ) ) );

输出:

[2 < 3 , and 3 > 2 , or 4 < 6 , and 7 < 8]