我有一个字符串如下
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和空格。 更新的例子。
答案 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]