我可以有两种输入字符串:
text1
text1|text2
我想打印输出字符串:text1-text2
我试过这个:
System.out.println("A|B".replaceAll("(.+)\\|(.+)?", "$1-$2")); // I expect A-B
System.out.println("A|" .replaceAll("(.+)\\|(.+)?", "$1-$2")); // I expect A-
System.out.println("A" .replaceAll("(.+)(\\|(.+))?", "$1-$3")); // I expect A-
System.out.println("A|B".replaceAll("(.+)(\\|(.+))?", "$1-$3")); // I expect A-B
使用以下输出:
A-B
A-
A-
A|B-
在上一次发生时我做错了什么?
答案 0 :(得分:1)
"A|B".replace('|', '-');
怎么样 - 没有理由在这里使用RegEx。
答案 1 :(得分:1)
.+
捕获所有内容但是换行符。由于第二组是可选的,因此它将捕获A|B
。
因此$1
将为A|B
,而$2
和$3
将为空。
您需要使用
(.+?)(\\|(.+))?
为了让它发挥作用。 ?
表示尽可能少。