任何人都可以帮助我吗? 我有一个方法作为管理联系簿的大型项目的一部分。
我需要使用String
,所以没有数组。
如果可能,我想使用compareTo
。
描述如下:
此方法插入联系人行(例如联系人:
给定笔记本中的6 | cori |ben | benben@hotmail.com | 4502334565)。联系线需要按姓氏的字母顺序排序。
此方法不验证dublicates。
参数预定我们要介绍联系线的书(来自参数)
我们假设这本书非空,但从一开始就是空的。
如果非空,则以这种方式形成:
/*
3|Crevier|Simon|simon@gmail.com|5145678988 (contact line)
1|Douglas|Sylvie|nothing|4507461234
2|Dumoulin|Fred|fredd@yahoo.ca|nothing
4|Girard|Myriam|nothing|nothing
*/
参数contactLine联系人格式化需要添加到书中的一行
我们假设接触线为非null,非空且格式良好(如示例中所示)
插入后新书的新字符串。新归还的书需要很好地格式化。
此方法需要使用另一种方法:来自同一类的findLastNameContact()方法(方法从联系人行的前一行获取姓名:3 |Crevier | Simon \ simimon @ gmail.com | 5145678988)=> Crevier是姓氏。
我们需要忽略这个案例。
/*
----------------------------------------------
METHOD IF CONTACT IS INSERTED IN THE BOOK
----------------------------------------------
Insert 1|crook|hubert|hubcrook@gmail.com|4502765009 in the empty book... ERROR
Expected:
1|crook|hubert|hubcrook@gmail.com|4502765009
Have found:
Instert 2|aubre|Camille|aucun|5149098778... ERROR
Expected:
2|Aubre|Camille|aucun|5149098778
1|crook|hubert|hubcrook@gmail.com|4502765009
Have found:
1|crook|hubert|hubcrook@gmail.com|45027650092|aubre|Camille|aucun|5149098778
1|crook|hubert|hubcrook@gmail.com|4502765009
Instert 3|charland|Marc|mcrook@yahoo.ca|nothing... ERROR -
NoSuchElementException unexpected.
Instert 4|mason|Isabelle|aucun|aucun... ERROR - NoSuchElementException unexpected.
Insert 5|fortin|Bruno|brunofortin@hotmail.com|5142768898... ERROR - NoSuchElementException unexpected.
Insert 6|ZHE|Xang|zzz@hotmail.com|4598765423... ERROR - NoSuchElementException unexpected.
Insert 7|morier|Dominic|doum@videotron.ca|4598765423... ERROR
Expected:
2|Aubre|Camille|aucun|5149098778
3|CHaRland|Marc|mcrook@yahoo.ca|aucun
1|crook|hubert|hubcrook@gmail.com|4502765009
5|Fortin|Bruno|brunofortin@hotmail.com|5142768898
4|Mason|Isabelle|aucun|aucun
7|Morier|Dominic|doum@videotron.ca|4598765423
6|ZHE|Xang|zzz@hotmail.com|4598765423
Have found :
2|Aubre|Camille|nothing|5149098778
3|CHaRland|Marc|mcrook@yahoo.ca|nothing
1|crook|hubert|hubcrook@gmail.com|4502765009
5|Fortin|Bruno|brunofortin@hotmail.com|5142768898
4|Mason|Isabelle|nothing|nothing
6|ZHE|Xang|zzz@hotmail.com|45987654237|morier|Dominic|doum@videotron.ca|4598765423
nothing
6|ZHE|Xang|zzz@hotmail.com|4598765423
Insertion 8|alban|Roger|Roger@gmail.com|5143677788... ERROR - NoSuchElementException unexpected.
*/
public static String InsertThisContactInTheBook
(String book, String contactLine) {
String lastNameContact;
String id, lastName, givenName, email, phone;
String newBook = "";
lastNameContact= findLastNameContact(contactLine);//contact line is from outside, also the findLastNameContact, witch is extraxting la last name from contact line
//6|cori|ben|benben@hotmail.com|4502334565| (example of contact line)
StringTokenizer tokens = new StringTokenizer(book, "|");
// newBook = book+ contactLine;
while (tokens.hasMoreTokens()){
id = tokens.nextToken();
lastName = tokens.nextToken();
givenName = tokens.nextToken();
email= tokens.nextToken();
phone= tokens.nextToken();
if (lastName.compareToIgnoreCase(lastNameContact) > 0) {
newBook = book + contactLine + "\n" + id + "|" + lastName + "|" + givenName + "|" + email+ "|" + phone+ "\n";
}
}
return newBook;
}
答案 0 :(得分:0)
这是家庭作业吗?如果是,你应该告诉我们。
首先,在我看来,您在book
中使用了两种不同的分隔符:|
分隔符,用于分隔每个contactLine
内的数据字段},以及用于在\n
内分隔单个contactLine
的{{1}}换行符分隔符。
请参阅代码的此部分:
book
因此,在if (lastName.compareToIgnoreCase(lastNameContact) > 0) {
newBook = book + contactLine + "\n" + id + "|" + lastName + "|" + givenName + "|" + email+ "|" + phone+ "\n";
}
上分隔的StringTokenizer
将解析|
,就像它的格式如下:
book
实际上两个contactLines应该是:
6|ZHE|Xang|zzz@hotmail.com|45987654237|morier|Dominic|doum@videotron.ca|459876542|nothing
请注意,两个6|ZHE|Xang|zzz@hotmail.com|4598765423
7|morier|Dominic|doum@videotron.ca|459876542|nothing
之间缺少|
分隔符。因此,代替contactLines
识别5 + 6 = 11个令牌,它会将StringTokenizer
标记为10个令牌,将book
视为1个令牌而不是2个单独的令牌,45987654237
和4598765423
。
第二次,您粘贴在上面的输出中的7
条目还有另一个问题。在上面引用的例子中,“ZHE Xang”和“morier Dominic”中,两行包含不同的标记。 ZHE Xang的contactLine
包含5个令牌,而morier Dominic包含6个令牌。因此,上面的contactLine
循环无法可靠地工作 - 期望所有while
有5个令牌,但有些明显有6个。
我引用了您的代码的这一部分:
contactLines
我认为这两个问题的最终结果实际上是同一个问题:它使while (tokens.hasMoreTokens()){
id = tokens.nextToken();
lastName = tokens.nextToken();
givenName = tokens.nextToken();
email= tokens.nextToken();
phone= tokens.nextToken();
循环中的代码块不可靠。无论是因为你使用两个分隔符而只是在一个分隔符上进行标记,或者是因为某些while
有6个令牌,最终结果是你的算法一直假设有5个令牌的倍数,但实际上它是5,6和9的某种组合,最终不是5的干净倍数。
我还有几个问题(也许最好对你原来的帖子发表评论)。只是值得深思。
contactLines
s?String
)?