【问题标题】:Regular Expressions - match a string containing "+" and "-"正则表达式 - 匹配包含“+”和“-”的字符串
【发布时间】:2015-07-21 02:46:04
【问题描述】:

我有一个字符串,比如1+++-3--+++++2,其中包括+- 符号。 我想做的是用+- 符号表示+- 部分。 如果字符串中有奇数个- 符号,我将用- 替换它,如果是偶数则替换为+。如何使用正则表达式做到这一点?

例如,我有一个数学表达式,比如1+-+-2-+--+3。它将被1+2-3 取代

【问题讨论】:

  • 您可能想了解更多细节。如果-+ 都是奇数/偶数会发生什么?如果- 是奇数而+ 是偶数会发生什么?
  • 我不关心+的数量是奇数还是偶数,最终结果只受-的数量影响
  • 听起来不像是正则表达式问题
  • 正如我所说,我使用正则表达式来匹配包含+- 符号的字符串
  • 你如何期望 1+-+-2-+--+3 是 1+2-3?

标签: java regex string numbers number-formatting


【解决方案1】:

您可以创建一个运算符数组并使用for 循环来计算一个字符的所有出现次数。例如:

String expression = "1+++-3--+++++2";
String[] str = expression.split("[0-9]+");

for(op : str) {
    int count = 0;
    for(int i =0; i < str.length(); i++)
        if(op.charAt(i) == '-')
            count++;

    if(count % 2 == 0) {
        op = "-";
    }
    else {
        op = "+";
    }
}

str[]中修改后的单字符运算符赋值后,写新的表达式应该比较简单了。

【讨论】:

  • 如果字符串是1++++--++3---+++---4怎么办?
  • @DizzyCode 如果出现次数为偶数,则需要添加else语句处理字符串
  • @UnknownOctopus 嗯,谢谢你的建议,我看看我是否可以改进答案。问题似乎变了。
  • @DizzyCode 没问题 :)。应该只是一个简单的}else{ str=str.replaceAll("-","+");} 另外,在你的if 语句的replaceAll 中,你应该根据OP 的需要将("-","+") 切换为("+","-")
  • @UnknownOctopus 我相信现在的问题是要求用一个字符替换整个字符串。
【解决方案2】:

基于格式将来自该计算器示例的假设。

//assumed format for input: <any number><any number of `-` and/or `+`><any number>

// 1++---+22+--1 will be 1-22+1
String input = "1++---+22+--1";
for (String s : input.split("[^-+]+");) {
    s = s.trim();
    if (!"".equals(s)) {
        String newStr = s.matches("[+]*-([+]*-[+]*-)*[+]*") ? "-" : "+";
        input = input.replace(s, newStr);
    }
}
System.out.println(input);

【讨论】:

  • 从技术上讲,您可以使用 Pattern/Matcher 循环编写更好的代码:Pattern p = Pattern.compile("[+-]+"); Matcher m = p.matcher(input); StringBuffer out = new StringBuffer(); while (m.find()) { if (m.group().matches("[+]*-([+]*-[+]*-)*[+]*") m.appendReplacement(out, "-"); else m.appendReplacement(out, "+"); } m.appendTail(out);
猜你喜欢
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 2022-11-22
相关资源
最近更新 更多