StringBuilder builder = new StringBuilder();
builder.setLength(10);
builder.append("d");
System.out.println(builder.length() + "\t" + builder.toString() + "\t" + builder.indexOf("d"));
输出:
11
问题:
Why indexOf() doesn't return anything.
我的理解:
As per my understanding, it should return 10, since StringBuilder is counting the "d" as part of its length in length().
But in case if "d" is not part of string hold by StringBuilder then, it should return -1 and length should be 10.
最佳答案
如果您查看StringBuilder#setLength(int newLength)
的文档
如果newLength参数大于或等于当前长度,则将附加足够的空字符('\ u0000'),以使长度成为newLength参数。
这就是为什么当您在设置长度后附加“ d”时,将其放置在10个空字符之后。
问:为什么indexOf()不返回任何内容。
由于索引是基于0的,因此它确实会返回一个10
值。这是代码的输出。
11 d 10 // the 10 represents the index of d
^-length ^-10 null chars followed by d
无法获得输出的原因可能是由于您的控制台不支持
null
字符。这就是为什么当遇到空字符\u0000
时,它将只是停止在控制台中打印值。尝试使用支持Unicode字符打印的eclipse。快照示例: