比较地址簿程序中的名字
我正在做一个地址簿作为学校作业的一部分,我主要是想通了一下,但我被困在一个部分。这是我的代码第一。我有一个AddressBook类,它包含变量和适当的getter和setter方法来更改/返回书中每个人的信息。然后我有一个TestAddressBook类和一个方法main来演示如何处理书籍的作品。我坚持的唯一的事情就是最终的要求,我被要求比较两个名字,看看它们是否相等。这是类的代码。比较地址簿程序中的名字
public class AddressBook {
private String firstName;
private String middleName;
private String lastName;
private String homeAddress;
private String homePhone;
private String cellPhone;
private String businessPhone;
private String skypeId;
private String facebookId;
private String personalWebSite;
public AddressBook(String firstName, String middleName, String lastName,
String homeAddress, String homePhone, String cellPhone,
String businessPhone, String skypeID, String facebookID,
String personalWebSite) {
this.firstName = firstName;
this.middleName = middleName;
this.lastName = lastName;
this.homeAddress = homeAddress;
this.homePhone = homePhone;
this.cellPhone = cellPhone;
this.businessPhone = businessPhone;
this.skypeId = skypeID;
this.facebookId = facebookID;
this.personalWebSite = personalWebSite;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getMiddleName() {
return middleName;
}
public void setMiddleName(String middleName) {
this.middleName = middleName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getHomeAddress() {
return homeAddress;
}
public void setHomeAddress(String homeAddress) {
this.homeAddress = homeAddress;
}
public String getHomePhone() {
return homePhone;
}
public void setHomePhone(String homePhone) {
this.homePhone = homePhone;
}
public String getCellPhone() {
return cellPhone;
}
public void setCellPhone(String cellPhone) {
this.cellPhone = cellPhone;
}
public String getBusinessPhone() {
return businessPhone;
}
public void setBusinessPhone(String businessPhone) {
this.businessPhone = businessPhone;
}
public String getSkypeId() {
return skypeId;
}
public void setSkypeId(String skypeId) {
this.skypeId = skypeId;
}
public String getFacebookId() {
return facebookId;
}
public void setFacebookId(String facebookId) {
this.facebookId = facebookId;
}
public String getPersonalWebSite() {
return personalWebSite;
}
public void setPersonalWebSite(String personalWebSite) {
this.personalWebSite = personalWebSite;
}
public static String compareNames(String name1, String name2) {
}
}
然后我的测试类...
public class TestAddressBook {
public static void main(String[] args) {
System.out.println("ENTRY 1");
AddressBook name1 = new AddressBook("Robert", "James", "Smith", "3 Fake St",
"222-321-8371", "222-423-2382",
"222-438-2918", "bob483", "bobfb493",
"http://www.freewebhost.com/bob848");
System.out.println("First Name: " + name1.getFirstName());
System.out.println("Middle Name: " + name1.getMiddleName());
System.out.println("Last Name: " + name1.getLastName());
System.out.println("Address: " + name1.getHomeAddress());
System.out.println("Home Phone: " + name1.getHomePhone());
System.out.println("Cell Phone: " + name1.getCellPhone());
System.out.println("Business Phone: " + name1.getBusinessPhone());
System.out.println("Skype ID: " + name1.getSkypeId());
System.out.println("Facebook ID: " + name1.getFacebookId());
System.out.println("Personal Website: " + name1.getPersonalWebSite());
System.out.println("\nENTRY 2");
AddressBook name2 = new AddressBook("Bruce", "Allan", "Carter", "56 Outtamy Way",
"564-342-8372", "564-283-9832",
"564-293-3489", "brucie392", "brucieface28",
"http://www.freewebhost.com/carteristheman");
System.out.println("First Name: " + name2.getFirstName());
System.out.println("Middle Name: " + name2.getMiddleName());
System.out.println("Last Name: " + name2.getLastName());
System.out.println("Address: " + name2.getHomeAddress());
System.out.println("Home Phone: " + name2.getHomePhone());
System.out.println("Cell Phone: " + name2.getCellPhone());
System.out.println("Business Phone: " + name2.getBusinessPhone());
System.out.println("Skype ID: " + name2.getSkypeId());
System.out.println("Facebook ID: " + name2.getFacebookId());
System.out.println("Personal Website: " + name2.getPersonalWebSite());
System.out.println("\nENTRY 3");
AddressBook name3 = new AddressBook("Susan", "Anne", "Peters", "6 Madeup Blvd",
"736-453-1238", "736-392-2385",
"736-926-2439", "anniep", "susananne",
"http://www.freewebhost.com/Susanspage");
System.out.println("First Name: " + name3.getFirstName());
System.out.println("Middle Name: " + name3.getMiddleName());
System.out.println("Last Name: " + name3.getLastName());
System.out.println("Address: " + name3.getHomeAddress());
System.out.println("Home Phone: " + name3.getHomePhone());
System.out.println("Cell Phone: " + name3.getCellPhone());
System.out.println("Business Phone: " + name3.getBusinessPhone());
System.out.println("Skype ID: " + name3.getSkypeId());
System.out.println("Facebook ID: " + name3.getFacebookId());
System.out.println("Personal Website: " + name3.getPersonalWebSite());
}
}
分配是要求这个...
“使用get和set方法,创建一个比较方法compareNames(name1,name2),它比较str的第一个,中间和最后一个名字名字1和名字2。假定名称1和名称2遵循以下格式:“名字M.姓氏”。“
该任务要求将两个字符串进行比较,并按照”罗伯特·J·史密斯和布鲁斯·A·卡特“等同的名字。“任何人都可以帮忙吗?
要比较两个字符串的内容,只需要使用string1.equals(string2);
这将返回一个布尔值,除此之外,您可能需要先清理字符串。通过调用字符串上的.CASE_INSENSITIVE_ORDER
不变,希望这有助于我并没有给太多
不要使用toLowerCase,请使用[String.CASE_INSENSTIVE_ORDER](https://docs.oracle.com/javase/8/docs/ api/java/lang/String.html#CASE_INSENSITIVE_ORDER) – xenoterracide
@xenoterracide这是做什么的? – Peake
它是一个比较器,它允许你比较没有区分大小写的字符串,当你将unicode添加到混合中时,presumbably不会以令人惊讶的方式表现,这只是对lowCase可能做的事情,因为当处理unicode时,case不是布尔值。 – xenoterracide
我刚刚意识到没有请求排序在这里......所以,简单的答案是,占空
public boolean compareNames(AddressBook a, AddressBook b) {
if (a == null || b == null) {
return false;
}
return Objects.equals(a.getFirstname(), b.getFirstname())
&& Objects.equals(...); // fill in the rest
}
你的规范没有考虑是否Susan Anne Peterson
和Susan Alice Peterson
应该是同一人(如果他们串的中间名,这意味着这通过缩短它)。使用Objects.equals
,因为它是无效的。
可以说,如果这是真的,你想要的域名等效,你实际上应该在AddressBook
实施equals
和hashCode
,正确的方式做到这一点看this article on equality。如果您决定实现平等,那么你可以验证它的正确性与EqualsVerifier
如果由于某种原因,你想比较/排序,在不区分大小写空安全的方式
Comparator<String> nsci =Comparator.nullsFirst(String.CASE_INSENSTIVE_ORDER)
return Comparator.comparing(AddressBook::getFirstName, nsci)
.thenComparing(AddressBook::getMiddleName, nsci)
.thenComparing(AddressBook::getLastName, nsci).compareTo(address1, address2); // if 0 they are equal
首先,让我们来格式化名字变成“名字MiddleInitial。姓氏”,这样他们可以很容易地进行比较。 这可以用下面的代码来完成:
//Get each part of the name:
String firstname1 = entry1.getFirstName();
String middleInitial1 = entry1.getMiddleName().charAt(0);
String lastname1 = entry1.getLastName();
//Combine them
String fullname1 = firstname + " " + middleInitial + ". " + lastname;
如果你想这是更紧凑,你可以在线条相结合。
String fullname1 = entry1.getFirstName() + " " + entry1.getMiddleName().chatAt(0) + ". " + entry1.getLastName();
对第二个条目重复此步骤,只更改变量名称。
现在,我们来比较两个字符串。这可以用一个简单的if
语句来完成,如下面:
if (fullname1.equalsIgnoreCase(fullname2) {
System.out.println(fullname1 + " is equal to " + fullname2);
} else {
System.out.println(fullname1 + " is not equal to " + fullname2);
}
现在,你的代码,让我们把它变成一个方法。这可以通过以下方式完成:
public static String (AddressBook entry1 AddressBook entry2) {
String fullname1 = entry1.getFirstName() + " " + entry1.getMiddleName().charAt(0) + ". " + entry1.getLastName();
String fullname2 = entry1.getFirstName() + " " + entry1.getMiddleName().charAt(0) + ". " + entry1.getLastName();
if (fullname1.equalsIgnoreCase(fullname2) {
return fullname1 + " is equal to " + fullname2;
} else {
return fullname1 + " is not equal to " + fullname2;
}
}
添加它。 Java的。抱歉! – ripp2k
为什么学校是废话*创建一个比较方法compareNames(name1,name2)*有一个接口为这个'比较器'停止教人们如何做错事的方式......用方法引用和Comparator.comparing ... https: //docs.oracle.com/javase/8/docs/api/java/util/Comparator.html – xenoterracide
请参阅9 http://www.baeldung.com/java-8-sort-lambda以获取组合方式,或你可以先连接字符串,然后比较那个...比较器将返回0,等于 – xenoterracide