有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

regex Java使用ReplaceALL表达式解析输入

我试图以某种方式获取输入格式。例如输入:

之前:

"12/4"

字符串中的每个字母后面都需要一个空格

之后:

" 12 / 4 "

另一个例子:

之前

"-10/-4*5"

之后

" -10 / -4 * 5 "

之前

6*-8/(-4+2) 

之后

 6 * -8 / ( -4 + 2 ) 

我使用空格来解析和拆分输入,但如果他们没有空格,我就不能按空格拆分


共 (2) 个答案

  1. # 1 楼答案

    在这种情况下,你不必使用空格,而是使用其他字符:

    正如我在你的例子中看到的,你可以尝试使用操作符作为分割参数,比如+-*/

    所以你可以这样使用:

    str.split("+|-|*");
    
  2. # 2 楼答案

    当括号中有数字或表达式时,我们可以假设+-不是一元数。其余的操作符,比如*{}{}不能是一元运算符,所以它们应该总是被空格包围

    利用以上假设,你可以创建

    String text = "-10/-4*+5+6+(1*2)-3^2";
    String formatted = text.replaceAll("(?<=[\\d)])[-+]|[*/^]", " $0 ");
    
    System.out.println(formatted);
    

    输出:

    -10 / -4 * +5 + 6 + (1 * 2) - 3 ^ 2
    ^^^   ^^   ^^                        these are not changed
    

    说明:我们只想用空间包围非一元运算符,所以

    • (?<=[\\d)])[-+]我们正在检查-+之前是否有任何数字或)使用look-behind{}
    • [*/^]我们接受任何{},{},{}作为需要被空格包围的非一元符号-如果您喜欢,可以在这里添加更多符号,例如{}{}
    • " $0 "-这里$0表示组0的匹配(来自整个正则表达式的匹配),所以我们只是用相同的运算符替换正则表达式找到的运算符,但用空格包围