0

我正在尝试这个教科书示例,我检查了一下,这正是书中的内容:-

public class StringBuilderConstructors
{
  public static void main(String[] args)
  {
    Object objectRef = "hello";
    String string = "goodbye";
    char[] charArray = {'a','b','c','d','e','f'};
    boolean booleanValue = true;
    char characterValue = 'Z';
    int integerValue = 7;
    long longValue = 10000000000L;
    float floatValue = 2.5f;
    double doubleValue = 33.333;

    StringBuilder lastBuffer = new StringBuilder("last buffer");
    StringBuilder buffer = new StringBuilder();

    buffer.append(objectRef)
    .append(System.getProperty("line.seperator"))
    .append(string)
    .append(System.getProperty("line.seperator"))
    .append(charArray)
    .append(System.getProperty("line.seperator"))
    .append(booleanValue)
    .append(System.getProperty("line.seperator"))
    .append(characterValue)
    .append(System.getProperty("line.seperator"))
    .append(integerValue)
    .append(System.getProperty("line.seperator"))
    .append(longValue)
    .append(System.getProperty("line.seperator"))
    .append(floatValue)
    .append(System.getProperty("line.seperator"))
    .append(doubleValue)
    .append(System.getProperty("line.seperator"))
    .append(lastBuffer);

    System.out.printf("buffer contains%n%s %n", buffer.toString());
  }
}

但它给我的结果是完全错误的。

缓冲区包含 hellonullgoodbyenullabcdefnulltruenullZnull7null10000000000null2.5null33.333nulllast 缓冲区

这整件事不应该在一条线上。

4

2 回答 2

2

System.getProperty("line.seperator")是不正确的,你想要System.lineSeparator()喜欢

buffer.append(objectRef) //
        .append(System.lineSeparator()) //
        .append(string) //
        .append(System.lineSeparator()) //
        .append(charArray) //
        .append(System.lineSeparator()) //
        .append(booleanValue) //
        .append(System.lineSeparator()) //
        .append(characterValue) //
        .append(System.lineSeparator()) //
        .append(integerValue) //
        .append(System.lineSeparator()) //
        .append(longValue) //
        .append(System.lineSeparator()) //
        .append(floatValue) //
        .append(System.lineSeparator()) //
        .append(doubleValue) //
        .append(System.lineSeparator()) //
        .append(lastBuffer);

或者直接消除buffer并使用final printf(注意适当printf翻译%n),如

System.out.printf("buffer contains%n%s%n%s%n%s%n%s%n%s%n%s%n%s%n%s%n", 
        objectRef, string, new String(charArray), booleanValue, 
        characterValue, integerValue, longValue, floatValue, doubleValue, 
        lastBuffer);
于 2018-11-30T04:22:45.547 回答
1

您的问题是您使用的是System.getProperty("line.seperator")use System.getProperty("line.separator"),我猜您很简单 usingseperator而不是separator拼写错误。Elliot 已经回答了另一种做事方式,以添加到您的答案中。我更喜欢以下代码:

String lineSeparator=System.getProperty("line.separator");
buffer.append(objectRef)
.append(lineSeparator)
.append(string)
.append(lineSeparator)
.append(charArray)
.append(lineSeparator)
.append(booleanValue)
.append(lineSeparator)
.append(characterValue)
.append(lineSeparator)
.append(integerValue)
.append(lineSeparator)
.append(longValue)
.append(lineSeparator)
.append(floatValue)
.append(lineSeparator)
.append(doubleValue)
.append(lineSeparator)
.append(lastBuffer);

我更喜欢重用代码,我认为它使代码更健壮。

于 2018-11-30T05:11:21.963 回答