我想列出以“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 " ";
}
}
答案 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)
您的human
都没有被调用,忽略大小写,Reda
,所以您对没有打印姓名的观察是正确工作逻辑的表现。
您的情况多余:您执行两次相同的测试:
name.equalsIgnoreCase("Reda") && (name.equalsIgnoreCase("Reda"))
如果您只需匹配字符串结尾,则应使用正则表达式:
name.matches("(?i).*reda")
toString
是为所有对象定义的通用方法。以你的方式使用它,只为一个特殊用例烘焙业务逻辑,这是不正确的。您必须重写代码,以便toString
统一返回对象的字符串表示。
答案 5 :(得分:0)
String.equals()
不是您想要的,因为您正在寻找以“Reda”结尾的字符串,而不是那些等于“Reda”的字符串。将String.match
或String.endsWith
与String.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
以下是使用endsWith
和toLowerCase
的解决方案:
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