繁体   English   中英

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

[英]How to switch character using regular expression in Java

我想将“ +”切换为“-”,将“-”切换为“ +”

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

我如何使用正则表达式执行此操作
我试过使用replaceAll()函数,但似乎无法正常工作,因为两次替换都不能一次进行。

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

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

实现此目的的一种怪异方法是拆分其中一个字符,例如+。 然后,将所有结果块中的所有-替换为+,最后一步将所有块替换为-。

    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);

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

.map(x -> x) 

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

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

String str = "+-+";

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

// inverted now contains "-+-"

这样,您无需更改中间字符并重复两次字符串,您只需查看每个字符一次即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM