如何在Java中使用正则表达式切换字符

时间:2017-04-08 19:38:35

标签: java regex

我想切换" +"到" - "和" - "到" +"

例如:+ + - + - + +- - + - + - -

我如何使用正则表达式执行此操作 我尝试过使用replaceAll()功能,但它似乎无法正常工作,因为两个替换都无法同时进行。

3 个答案:

答案 0 :(得分:2)

您可以先替换其中一个未使用的字符:

s = s.replace('-', '#');
s = s.replace('+', '-');
s = s.replace('#', '+');

答案 1 :(得分:1)

实现这一目标的一种奇怪的方法是分裂其中一个角色,让我们说+。然后用+替换所有生成的块,并作为最后一步用 - 连接所有块。

    String str = "++--+++---+-++";
    String[] split = str.split("[+]", Integer.MAX_VALUE);
    String[] chunks = new String[split.length];
    for (int i = 0, l = split.length; i<l; i++) {
        chunks[i] = split[i].replaceAll("-", "+");
    }
    String result = String.join("-", chunks);

答案 2 :(得分:1)

如果您使用的是Java 8,它现在支持更多功能样式编程,包括map等功能。 Map可以应用于流,在这种情况下是从String创建的Ints流。 Map将一个函数(在这种情况下为lambda函数)应用于该流的每个成员并输出其他内容:

.map(x -> x) 

基本上什么也不做,因为它会输出您输入的内容,流将保持不变。在lambda函数中应用逻辑允许您根据某些条件确定输出。

然后将此转换后的流一起收集到字符串构建器中,然后作为String输出。

String str = "+-+";

String inverted = str.chars().map(x -> x == '+' ? '-' : '+')
                     .collect(StringBuilder::new,
                              StringBuilder::appendCodePoint, 
                              StringBuilder::append)
                     .toString();

// inverted now contains "-+-"

这样就不需要换成中间字符并翻过字符串两次,你只需要看一次每个字符。