Replaceall方法无法按预期工作。文字被替换两次

时间:2017-09-08 11:19:23

标签: java

当我执行下面的代码时,文字被替换两次

public  void  obify("CREATENEWABCDEFGHTNEW"){
        String _obiText=_obi;
        _obiText=_obiText.replaceAll("A","OBA");
        _obiText=_obiText.replaceAll("E","OBE");
        _obiText=_obiText.replaceAll("I","OBi");
        _obiText=_obiText.replaceAll("O","OBO");
        _obiText=_obiText.replaceAll("U","OBU");
        System.out.println(_obiText);
        }

预期产量:CROBEOBATOBENOBEWOBABCDOBEFGHTNOBEW;用OB'Vowel Literal'替换所有元音 实际输出:CROBOBEOBOBATOBOBENOBOBEWOBOBABCDOBOBEFGHTNOBOBEW,这是一个不受欢迎的和未被发现的。

是否还有其他Java函数可以执行我打算执行的任务。

2 个答案:

答案 0 :(得分:4)

如何替换元音?

_obiText = _obiText.replaceAll("[AEIOU]","OB$0");

答案 1 :(得分:3)

看看你在做什么:

_obiText=_obiText.replaceAll("A","OBA");

这里用“OBA”替换所有“A”。很好,效果很好。让我们继续。

_obiText=_obiText.replaceAll("E","OBE");
_obiText=_obiText.replaceAll("I","OBi");

好吧,多一点......

_obiText=_obiText.replaceAll("O","OBO");

在这里你搞砸了。你用“OBx”替换了所有东西,x是元音。当然,你和替代者所写的“O”也是如此。所以你得到的文本比预期的要长。解决方案?首先将“O”替换为“OBO”,然后替换其他所有内容,然后就可以了。

PD:你可以说你的结果是不受欢迎的,因为它不是你想要它做的,但不是意料之外的,因为如果你阅读并理解完全预期的代码。