【问题标题】:Java toString() How to return String message in place of nullJava toString()如何返回String消息代替null
【发布时间】:2020-02-01 01:19:55
【问题描述】:

如何在返回 null 的字段中打印“错误”字符串消息?这是我想要做的:
当传递一个动物对象时,toString() 方法应该返回一个如下所示的字符串。

Name: "fluffy"
Breed: Pitbull
Age: Data not available

从上面的示例可以看出,字符串包含每个字段的标签,后跟一个冒号和存储在该字段中的数据。我可以像下面的示例一样打印字符串(注意 Age 缺少数据,因为它为空)。

Name: "fluffy"
Breed: Pitbull
Age: 

我已经像这样写了toString() 方法

    public String toString() {
        return "\n" +
                "\nName: " + this.name +
                "\nBreed: " + this.breed +
                "\nAge: " + this.age +
                "\n";
}

当字段为空或为空时,我希望将数据替换为“无可用数据”消息。

我尝试过使用条件语句

@Override
    public String toString() {
    String errorMessage = "Data not available";
        if (name == null){
            System.out.println(errorMessage);
        }
        if (breed == null){
            System.out.println(errorMessage);
        }...

我也试过用 for each 循环遍历

    @Override
    public String toString() {
      for (String field: fields)
            if (field != null) {
        return "\n" +
                "\nName: " + this.name +
                  "\nBreed: " + this.breed +
                  "\nAge: " + this.age +
                  "\n";
    }
}
            } else (field == null){
                return "Data not available";
            }

我已经查看了此处的其他提要,但仍然不太了解如何确保每个字段(如果为 null)收到错误消息。 以下是我在 StackOverflow 上查看过的帖子列表: Returning a string with toString java ,
java toString() is returning null from class , java toString() returning this

提前感谢您的帮助!我是编码新手,我非常感谢一路帮助我理解的所有人。

【问题讨论】:

    标签: java string null tostring


    【解决方案1】:
    class Dog {
    
        private static final String DEFAULT_MESSAGE = "No Data Available";
    
        private final String name;
    
        private final String breed;
    
        private final Integer age;
    
        public Dog(String name, String breed, Integer age) {
            this.name = name;
            this.breed = breed;
            this.age = age;
        }
    
        @Override
        public String toString() {
            return String.format("name=%s\nbreed=%s\nage=%s",
                    name == null ? DEFAULT_MESSAGE : name,
                    breed == null ? DEFAULT_MESSAGE : breed,
                    age == null ? DEFAULT_MESSAGE : age);
        }
    }
    

    【讨论】:

    • 这没关系,我还想问一下 OP for 循环中的 fields 变量是什么。如果fields 将包含所有字段,则 toString 可以正确附加例如字符串生成器。无论如何,OP 提供的代码是不够的,而且情况如此狭窄,删除final 并默认将对象成员分配给DEFAULT_MESSAGE 将简化toString 并仍然解决问题。
    【解决方案2】:

    你需要结合你的两次尝试。

    public String toString() {
        String errorMessage = "Data not available";
        String n = name;
        if (n == null) n = errorMessage;
    
        String b = breed;
        if (b == null) b = errorMessage;
    
        String a = age;
        if (a == null) a = errorMessage;
    
        return "\n" +
              "\nName: " + n +
              "\nBreed: " + b +
              "\nAge: " + a +
              "\n";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 2019-08-11
      相关资源
      最近更新 更多