在java.lang.String

时间:2016-10-19 15:05:20

标签: java string replace charsequence

此代码段打印?!

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)

2 个答案:

答案 0 :(得分:5)

这是因为第一个StringBuilder并没有按照您的想法行事。没有StringBuilder构造函数需要char,因此'Z'扩展为int,而that constructor则使用StringBuilder。由于该构造函数不会在str = str.replace("", "?!"); 中添加任何内容(它只是设置容量),因此您可以有效地执行此操作:

ellipse.position.set(0,0,0);
ellipse.rotation.set(0,0,0);
ellipse.updateMatrix();

ellipse.applyMatrix(DCM);
ellipse.updateMatrix();

ellipse.translateX(r.x);
ellipse.translateY(r.y);
ellipse.translateZ(r.z);
ellipse.updateMatrix();

ellipse.rotateZ(RAAN); // RAAN : right angle of ascending node
ellipse.rotateX(inc);  // inc  : orbit inclination
ellipse.rotateZ(ArgP); // ArgP : Argument of Periapsis.
ellipse.updateMatrix();

ellipse.translateX(-c);
ellipse.updateMatrix();

显示与您所看到的行为相同的行为。

答案 1 :(得分:0)

经过一番挖掘,我终于找到了答案
resueman 的建议解释相反,测试

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

返回 false ,所以我 NOT &#34;有效地做&#34; "".replace("", "?!")。为了更好地理解我的观点,请注意<
"_".replace("", "^")返回 ^ _ ^ 。找到一分钟来运行这个LOC,你会很开心,我确定
这种看似奇怪的行为背后的真正原因是正则表达式引擎匹配空字符串中的边界......