2014-12-04 61 views
1

例如...是否可以将对String的replaceAll方法的调用反转?

String s = "abcxyzabcxyz"; 
s.replaceAll("xyz", "---"); 

这通常给我"abc---abc---"。我怎么会得到它给我"---xyz---xyz"而不是?

+0

那么,我的第一枪会是's.replaceAll(“abc”,“---”)',但我想这不是你想要的,对吧? – 2014-12-04 13:10:11

+3

它应该如何处理:'String s =“abcwxyzabctuvwxyz”;','s.replaceAll(“xyz”,“123”);' – Eypros 2014-12-04 13:10:14

+0

它不应该太难...... [replaceAll](http ://docs.oracle.com/javase/6/docs/api/java/lang/String.html#replaceAll)需要一个正则表达式作为第一个参数 – AJPerez 2014-12-04 13:12:13

回答

3

String#replaceAll接受一个正则表达式,如果我理解正确的话,你可以使用:

s.replaceAll("[^xyz]", "---") 

说明:

[^xyz]手段任何字符的 “X” 的之一,“Y “或”z“。

为了否定 “XYZ” 作为一个系列,使用:

^(?!.*xyz).*$ 
+1

如果你有“xabcxyzaxbcxyz”它返回x --- xyz-x - xyz。正则表达式应该包括三个字母的顺序相同,而不是任何单一的外观。我认为[this](http://stackoverflow.com/a/1240293/1656663)应该用来构建正则表达式 – jesantana 2014-12-04 13:32:04

+1

第二个正则表达式^ ^(!!。* xyz)。* $'替换整个字符串或没有。我想你想使用@ jesantana的接受的答案:http://stackoverflow.com/a/1240337/1969638 – Zantier 2014-12-04 13:52:41

2

您可以使用此...

s.replaceAll("[^xyz]", "-"); 

在一个更正式的Java方法,我将使用模式类,像这样:

Pattern p = Pattern.compile("[^xyz]"); 
s.replaceAll(p.pattern(), "-"); 
+0

正如Adrian Nasui在一则评论中所说的,这产生了'abc ------- --abc ---------'。 – 2014-12-04 13:16:28

+0

刚刚编辑我的答案,以反映这一点。 – mutlei 2014-12-04 13:17:00

+1

如果字符串是“xabcxyzaxbcxyz”,则返回x --- xyz-x - xyz。正则表达式应该包含三个字母顺序相同,而不是任何单一的外观 – jesantana 2014-12-04 13:22:55

相关问题