使用单词分隔符拆分字符串
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]
【讨论】:
以上是关于使用单词分隔符拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章