我最近遇到了一个奇怪的问题。我正在使用StringBuffer
创建一个字符串,当我在字符串中添加一些空格时,我意识到某些字符已经消失了。
示例:
public static void main(String[] args) throws Exception {
StringBuffer sb = new StringBuffer();
sb.append("000.00 ");
sb.append(filler(800));
sb.append(filler(800));
sb.append(filler(800));
sb.append(filler(800));
sb.append(filler(800));
System.out.println(sb.toString());
System.out.println(sb.toString().charAt(4));
}
public static String filler(Integer size) {
return String.join("", Collections.nCopies(size, " "));
}
在Eclipse中运行的输出:
000.
0
filler
是一个创建空字符串的函数。
当我运行它时,我的初始字符串简单的最后两个零消失了。奇怪的是,如果我在这些位置打印位置的值,则会出现零。
这是StringBuffer类的某种错误吗?
答案 0 :(得分:4)
当您输出具有相对重要字符数的String
时,这可能是您的IDE特有的呈现问题。
如果我在Eclipse上运行你的程序我看确实是一个意外的输出:
000.
虽然我期望000.00
作为该行的开头。
但是如果我复制Eclipse控制台中生成的行的开头并将其粘贴到其他地方,我会看到预期的输出:
000.00
创建StringBuilder
的子字符串,您可以看到准确的可见输出:
System.out.println(sb.substring(0,6));
有关信息,问题仅发生在最后append()
:
sb.append(filler(800));
sb.append(filler(800));
sb.append(filler(800));
sb.append(filler(800));
sb.append(filler(800)); // issue in the output from there
请注意,您可以在Eclipse首选项中强制最大字符宽度。每次达到一行的最大字符宽度时,它将导致换行。
例如,使用此设置,我现在可以看到预期的输出:
000.00
但是作为副作用,每当我的线超过固定限制时,输出中会有breakline
。