如何在toString方法中使条件多于条件

时间:2013-06-22 16:12:08

标签: java

我想列出以“Reda”结尾的所有名称并忽略区分大小写,我已经在底部的toString方法中尝试了这个条件,但它不会打印任何东西。

public class Customer {

    public static void main(String[] args) throws IOException {

        File a = new File("customer.txt");
        FileWriter v = new FileWriter(a);
        BufferedWriter b = new BufferedWriter(v);
        PrintWriter p = new PrintWriter(b);

        human Iman = new human("Iman", 5000);
        human Nour = new human("Nour", 3500);
        human Redah = new human("Redah", 0);
        human iman = new human("iman", 200);
        human MohamedREDA = new human("MohamedREDA", 3000);
        human Mohamed_Redah = new human("Mohamed Redah", 2000);

        human[] h = new human[6];

        h[0] = Iman;
        h[1] = Nour;
        h[2] = Redah;
        h[3] = iman;
        h[4] = MohamedREDA;
        h[5] = Mohamed_Redah;

        p.println(Iman);
        p.println(Nour);
        p.println(Redah);
        p.println(iman);
        p.println(MohamedREDA);
        p.println(Mohamed_Redah);

        p.flush();
    }

}

class human {
    public String name;
    public double balance;

    public human(String n, double b) {
        this.balance = b;
        this.name = n;
    }

    @Override
    public String toString() {

        if (name.equalsIgnoreCase("Reda") && (name.equalsIgnoreCase("Reda"))) {
            return name + " " + balance;
        } else
            return " ";
    }
}

6 个答案:

答案 0 :(得分:1)

请避免将条件置于toString方法中。删除那里的条件

public String toString() {
    return name + " " + balance;
}

并更改Customer

中的逻辑
human[] h = new human[6];

h[0] = Iman;
h[1] = Nour;
h[2] = Redah;
h[3] = iman;
h[4] = MohamedREDA;
h[5] = Mohamed_Redah;

for (int i = 0; i < h.length; i++) {
    if (h[i].name.toLowerCase().endsWith("reda")) { // condition here
        p.println(h[i]);
    }
}

并且使用loops不要复制代码行。每次手动编写行。

检查Java String class并使用所需方法添加条件。

答案 1 :(得分:0)

你不应该在toString()方法原因中加入这样的条件,因为它没有正确地将业务应用程序逻辑放在这个方法中。

  

toString()是对象的字符串表示形式。

您可以做的是在调用toString()之前设置条件,或者为此设置helper方法。

private boolean endsWithIgnoringCase(String other){
 return this.name.toLowerCase().endsWith(other.toLowerCase()); 
}

答案 2 :(得分:0)

String redahname = ("Redah").toLowerCase();   //put your h[0] instead of ("Redah")

        if(name.endsWith("redah")){ //IMPORTANT TO BE IN LOWER CASE, (it is case insenitive this way)
            //your code here if it ends with redag
            System.out.println(redahname);
        } //if it does not end with "redah" it wont out print it!

您可以使用此功能,但是请您解释一下您的问题吗?你究竟需要什么?

答案 3 :(得分:0)

试试这个

   @Override
    public String toString() {

        if (name.toLowerCase().endsWith("reda"))) {
            return name + " " + balance;
        } else
            return " ";
    }

答案 4 :(得分:0)

  1. 您的human都没有被调用,忽略大小写,Reda,所以您对没有打印姓名的观察是正确工作逻辑的表现。

  2. 您的情况多余:您执行两次相同的测试:

    name.equalsIgnoreCase("Reda") && (name.equalsIgnoreCase("Reda"))
    
  3. 如果您只需匹配字符串结尾,则应使用正则表达式:

    name.matches("(?i).*reda")
    
  4. toString是为所有对象定义的通用方法。以你的方式使用它,只为一个特殊用例烘焙业务逻辑,这是不正确的。您必须重写代码,以便toString统一返回对象的字符串表示。

答案 5 :(得分:0)

String.equals()不是您想要的,因为您正在寻找“Reda”结尾的字符串,而不是那些等于“Reda”的字符串。将String.matchString.endsWithString.toLowerCase一起使用即可为您完成此操作。以下是String.match

的示例
public class Reda {
  public static void main(String[] args) {
    String[] names = {"Iman", "MohamedREDA", "Mohamed Redah", "reda"};

    for (String name : names) {
      // the input to matches is a regular expression.
      // . stands for any character, * stands for may repeating any times
      // [Rr] stands for either R or r.
      if (name.matches(".*[Rr][Ee][Dd][Aa]")) {
        System.out.println(name);
      }
    }
  }
}

及其输出:

MohamedREDA
reda

以下是使用endsWithtoLowerCase的解决方案:

public class Reda {
  public static void main(String[] args) {
    String[] names = {"Iman", "MohamedREDA", "Mohamed Redah", "reda"};

    for (String name : names) {
      if (name.toLowerCase().endsWith("reda")) {
        System.out.println(name);
      }
    }
  }
}

及其输出:

MohamedREDA
reda