2013-02-16 53 views
1
String inputString = args[0]; 
String out2 = inputString.replaceAll("I", "you"); 
String out1 = out2.replaceAll("you", "I"); 
System.out.println(out1); 

以上是主要方法中的代码。它应该用“我”代替“你”,用“你”代替“我”,但是只有后者调用replaceAll()才能工作(如在out2中调用的那样)。在运行时,我已经设置了第一个参数作为输入字符串,以“我讨厌你的一切”,它应该为你切换我,反之亦然,而是输出“我讨厌我的一切”。String.replaceAll() - 将“I”替换为“You”,反之亦然

任何想法?

干杯

回答

12

这是因为所有的I's已经成为you,通过更换you's的时间。

您需要使用这些种替代的中间值替换像这样的工作:

inputString = inputString.replaceAll("I", "_I_") 
         .replaceAll("you", "I") 
         .replaceAll("_I_", "you"); 

这个假设,你的中间值("_I_")是不是已经在你的字符串。所以,你必须谨慎选择。

+0

此外,中间值仅适用于首先在文本中不存在中间值的假设。 – nhahtdh 2013-02-16 18:46:27

+0

@nhahtdh。是的。 :) – 2013-02-16 18:48:26

+0

当然,总是有道理 - 谢谢! :) – 2013-02-16 20:18:55

1

你正在改变。您需要的是与临时符号的交换,即#TEMP#表示我,我表示你,#表示TEMP#。

+0

这只适用于临时符号从不出现在文本中的假设。 – nhahtdh 2013-02-16 18:45:32

+0

替代“从未出现在文本中的临时符号”。 – 2013-02-20 19:11:18

相关问题