【问题标题】: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”作为分隔符,但您的输出暗示使用“”作为分隔符。请澄清。
  • 哇!我举了一个不好的例子作为字符串..让我再举一个例子

标签: java string-matching


【解决方案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]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-28
        • 2013-06-28
        • 1970-01-01
        • 1970-01-01
        • 2011-11-29
        • 2015-05-15
        • 2011-12-26
        • 2013-09-09
        相关资源
        最近更新 更多