= h , g , >=, h , g >= h =|==|\\+|\\*|\\-||/|=])|(?=-6ren">
gpt4 book ai didi

Java String.split() 正则表达式

转载 作者:太空狗 更新时间:2023-10-29 22:59:11 26 4
gpt4 key购买 nike

我有一个字符串:

String str = "a + b - c * d / e < f > g >= h <= i == j";

我想在所有运算符上拆分字符串,但将运算符包含在数组中,因此生成的数组如下所示:

[a , +,  b , -,  c , *,  d , /,  e , <,  f , >,  g , >=,  h , <=,  i , ==,  j]

我目前有这个:

public static void main(String[] args) {
String str = "a + b - c * d / e < f > g >= h <= i == j";
String reg = "((?<=[<=|>=|==|\\+|\\*|\\-|<|>|/|=])|(?=[<=|>=|==|\\+|\\*|\\-|<|>|/|=]))";

String[] res = str.split(reg);
System.out.println(Arrays.toString(res));
}

这非常接近,它给出:

[a , +,  b , -,  c , *,  d , /,  e , <,  f , >,  g , >, =,  h , <, =,  i , =, =,  j]

我可以做些什么来让多字符运算符像我希望的那样出现在数组中吗?

作为一个不太重要的次要问题,正则表达式中是否有一种方法可以去除字母周围的空格?

最佳答案

String[] ops = str.split("\\s*[a-zA-Z]+\\s*");
String[] notops = str.split("\\s*[^a-zA-Z]+\\s*");
String[] res = new String[ops.length+notops.length-1];
for(int i=0; i<res.length; i++) res[i] = i%2==0 ? notops[i/2] : ops[i/2+1];

这应该可以做到。一切都很好地存储在 res 中。

关于Java String.split() 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9856916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com