正则表达式 - 匹配包含“+”和“-”的字符串
Posted
技术标签:
【中文标题】正则表达式 - 匹配包含“+”和“-”的字符串【英文标题】: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?
【参考方案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);
以上是关于正则表达式 - 匹配包含“+”和“-”的字符串的主要内容,如果未能解决你的问题,请参考以下文章