此代码段打印?!
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)
答案 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)
"".equals(new StringBuilder('Z'))
返回 false ,所以我 NOT "有效地做" "".replace("", "?!")
。为了更好地理解我的观点,请注意<
"_".replace("", "^")
返回 ^ _ ^ 。找到一分钟来运行这个LOC,你会很开心,我确定
这种看似奇怪的行为背后的真正原因是正则表达式引擎匹配空字符串中的边界......