【问题标题】:Misbehaving replace(CharSequence, CharSequence) in java.lang.Stringjava.lang.String 中行为不当的替换(CharSequence,CharSequence)
【发布时间】:2016-10-19 15:05:19
【问题描述】:

这个 sn-p 打印 ?!

String str = "";
str = str.replace(new StringBuilder('Z'), new StringBuilder("?!"));
System.out.println(str);    // prints ?! 

怎么会?
(我在 Win7 上使用 HotSpot x64 VM (25.66-b18) 运行 JSE RTE 1.8.0_66)

【问题讨论】:

  • 你认为它应该打印什么,为什么?这一点点信息表明您已经完成了研究。
  • @SotiriosDelimanolis 由于对象不包含目标序列 Z,它不应该改变 --- 这是我最初的推理。显然有问题,现在我知道原因了

标签: java string replace charsequence


【解决方案1】:

经过一番挖掘,我终于找到了答案。

resueman 建议的解释相反,测试

"".equals(new StringBuilder('Z'))

返回 false,所以我 没有“有效地做”"".replace("", "?!")。为了更好地理解我的观点,请注意

"_".replace("", "^") 返回 ^_^ 。一定要找一分钟来运行这个 LOC,我敢肯定,你会很开心。

这种看似奇怪的行为背后的真正原因是正则表达式引擎匹配空字符串中的边界......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    相关资源
    最近更新 更多