使用单词分隔符拆分字符串

Posted

技术标签:

【中文标题】使用单词分隔符拆分字符串【英文标题】:Splitting a String using Word Delimiters 【发布时间】:2011-09-11 06:00:05 【问题描述】:

我有一个字符串如下

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

结果必须是:

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

我想在出现 "and" 、 "or" 时拆分字符串并检索分隔符以及令牌。[我需要它们来评估表达式]

我尝试使用 StringTokenizer 作为

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

但我没有得到想要的结果。 我尝试使用扫描仪作为

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

这可以拆分但不返回分隔符。

请提出建议。

我在上面给出了 a 、 b 、 c ,但是用单词代替了 a,b , c 和空格。 更新示例。

【问题讨论】:

您的描述暗示使用字符串“and”和“or”作为分隔符,但您的输出暗示使用“”作为分隔符。请澄清。 哇!我举了一个不好的例子作为字符串..让我再举一个例子 ***.com/questions/3777546/… 【参考方案1】:

这将拆分“and”或“or”,单词周围有任意数量的空格。

   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

【讨论】:

如何获取分隔符?【参考方案2】:

当您遇到所有不同的空白排列并且随着语法的增长时,您真正想要的是像 JFlex 这样的工具。从长远来看,您将节省时间。

【讨论】:

【参考方案3】:
String delim = " ";
String[] splitstrings = yourString.split(delim);
for (int i = 0; i < splitstrings.length(); i++) 
    splitstrings += delim;

【讨论】:

OP 希望 delims 也被退回。 split 不会返回 delims。【参考方案4】:

据我所知,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());
    

【讨论】:

【参考方案5】:
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]

【讨论】:

以上是关于使用单词分隔符拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章

php爆炸:使用空格分隔符将字符串拆分为单词

如何在Java中使用分隔符在所有大写单词之后拆分字符串?

在分隔符是单词的Java中拆分字符串

如何在 bash shell 中将一个字符串拆分为多个字符串,至少用一个空格分隔?

问题14:如何拆分含有多种分隔符的字符串

140. 单词拆分 II