在不使用数组的情况下使用 compareToIgnoreCase() 将条目与字符串中的子字符串进行比较
Using compareToIgnoreCase() to compare an entry to substring in string without using array
在我的作业中,禁止使用集合和任何数组。我们可以使用 String Tokenizer,但不允许使用除 String 和 System 之外的任何其他 类。此解决方案必须适用于任意数量的条目。
我有一个字符串,如下所示:
1|Aaron|Peter|3063543030|john@gmail.com + "\n"
2|Buffet|Anthony|3063543030|john@gmail.com + "\n"
3|Dunty|Richard|3063543030|john@gmail.com
例如,如果条目是 4|Doe|John|3063543030|john@gmail.com 则将使用 compareToIgnoreCase() 进行比较,条目将插入到 3|Dunty|Richard 之前|3063543030|约翰@gmail.com
这里我有一个获取条目名称的方法,它使用 String Tokenizer :
public static String obtenirNomContact (String contactLigne) {
StringTokenizer tokenizer = new StringTokenizer(contactLigne, "|");
String id = tokenizer.nextToken();
String nom = tokenizer.nextToken();
String prenom = tokenizer.nextToken();
return nom;
}
在这个方法中,我在字符串中插入条目并使用 compareToIgnoreCaseMethod()
进行比较
public static String insertEntryInString
(String myString, String entry) {
int result = 0;
String entryName = "";
String myString = "";
String entry = "";
String nameInString = "";
if (myString != null) {
myString += entry + "\n";
do {
entryName = getContactName(entry);
nameInString = getContactName(myString);
result = entryName.compareToIgnoreCase(nameInString);
if (result < 0) {
entry += entryName + "\n";
entry += nameInString + "\n";
} else {
entry += nameInString + "\n";
entry += entryName + "\n";
}
} while (result > 0);
myString += entry + "\n";
System.out.println(myString);
}
return myString;
}
我目前正在尝试做但没有成功的是,仅当比较结果等于 1 或 0 时才将条目插入字符串。
如果有人能帮我解决这个问题,我将不胜感激。
谢谢
假设实现了以下辅助方法来获取联系人的姓氏和姓名:
static String getSurname(String contact) {
StringTokenizer st = new StringTokenizer(contact, "|");
st.nextToken(); // skip id
return st.nextToken();
}
static String getName(String contact) {
StringTokenizer st = new StringTokenizer(contact, "|");
st.nextToken(); // skip id
st.nextToken(); // skip surname
return st.nextToken();
}
然后,将新联系人插入排序后的联系人“列表”的方法可以重写为'\n'
:
private static final String NL = "\n";
static String insertContact(String contact, String data) {
String newSurname = getSurname(contact);
String newName = getName(contact);
StringTokenizer st = new StringTokenizer(data, NL);
StringBuilder sb = new StringBuilder();
boolean inserted = false;
while (st.hasMoreTokens()) {
String curr = st.nextToken();
String currSurname = getSurname(curr);
String currName = getName(curr);
if (!inserted && (currSurname.compareToIgnoreCase(newSurname) > 0 || (currSurname.compareToIgnoreCase(newSurname) == 0 && currName.compareToIgnoreCase(newName) > 0))) {
inserted = true;
System.out.println("Inserting before " + curr);
sb.append(sb.length() > 0 ? NL : "").append(contact);
}
sb.append(sb.length() > 0 ? NL : "").append(curr);
}
if (!inserted) {
sb.append(sb.length() > 0 ? NL : "").append(contact);
}
System.out.println("Data:\n" + sb);
System.out.println("---------");
return sb.toString();
}
测试:
String data = "1|Abercrombie|Peter|3063543030|john@gmail.com\n"
+ "2|Buffet|Anthony|3063543030|john@gmail.com\n"
+ "3|Dunty|Richard|3063543030|john@gmail.com";
data = insertContact("4|Doe|John|3063543030|john@gmail.com", data);
data = insertContact("5|Aaron|Paul|5551234567|apaul@breakingbad.com", data);
data = insertContact("6|Gilligan|Vince|5559123456|vinceg@breakingbad.com", data);
输出:
Inserting before 3|Dunty|Richard|3063543030|john@gmail.com
Data:
1|Abercrombie|Peter|3063543030|john@gmail.com
2|Buffet|Anthony|3063543030|john@gmail.com
4|Doe|John|3063543030|john@gmail.com
3|Dunty|Richard|3063543030|john@gmail.com
---------
Inserting before 1|Abercrombie|Peter|3063543030|john@gmail.com
Data:
5|Aaron|Paul|5551234567|apaul@breakingbad.com
1|Abercrombie|Peter|3063543030|john@gmail.com
2|Buffet|Anthony|3063543030|john@gmail.com
4|Doe|John|3063543030|john@gmail.com
3|Dunty|Richard|3063543030|john@gmail.com
---------
Data:
5|Aaron|Paul|5551234567|apaul@breakingbad.com
1|Abercrombie|Peter|3063543030|john@gmail.com
2|Buffet|Anthony|3063543030|john@gmail.com
4|Doe|John|3063543030|john@gmail.com
3|Dunty|Richard|3063543030|john@gmail.com
6|Gilligan|Vince|5559123456|vinceg@breakingbad.com
---------
在我的作业中,禁止使用集合和任何数组。我们可以使用 String Tokenizer,但不允许使用除 String 和 System 之外的任何其他 类。此解决方案必须适用于任意数量的条目。
我有一个字符串,如下所示:
1|Aaron|Peter|3063543030|john@gmail.com + "\n"
2|Buffet|Anthony|3063543030|john@gmail.com + "\n"
3|Dunty|Richard|3063543030|john@gmail.com
例如,如果条目是 4|Doe|John|3063543030|john@gmail.com 则将使用 compareToIgnoreCase() 进行比较,条目将插入到 3|Dunty|Richard 之前|3063543030|约翰@gmail.com
这里我有一个获取条目名称的方法,它使用 String Tokenizer :
public static String obtenirNomContact (String contactLigne) {
StringTokenizer tokenizer = new StringTokenizer(contactLigne, "|");
String id = tokenizer.nextToken();
String nom = tokenizer.nextToken();
String prenom = tokenizer.nextToken();
return nom;
}
在这个方法中,我在字符串中插入条目并使用 compareToIgnoreCaseMethod()
进行比较 public static String insertEntryInString
(String myString, String entry) {
int result = 0;
String entryName = "";
String myString = "";
String entry = "";
String nameInString = "";
if (myString != null) {
myString += entry + "\n";
do {
entryName = getContactName(entry);
nameInString = getContactName(myString);
result = entryName.compareToIgnoreCase(nameInString);
if (result < 0) {
entry += entryName + "\n";
entry += nameInString + "\n";
} else {
entry += nameInString + "\n";
entry += entryName + "\n";
}
} while (result > 0);
myString += entry + "\n";
System.out.println(myString);
}
return myString;
}
我目前正在尝试做但没有成功的是,仅当比较结果等于 1 或 0 时才将条目插入字符串。
如果有人能帮我解决这个问题,我将不胜感激。
谢谢
假设实现了以下辅助方法来获取联系人的姓氏和姓名:
static String getSurname(String contact) {
StringTokenizer st = new StringTokenizer(contact, "|");
st.nextToken(); // skip id
return st.nextToken();
}
static String getName(String contact) {
StringTokenizer st = new StringTokenizer(contact, "|");
st.nextToken(); // skip id
st.nextToken(); // skip surname
return st.nextToken();
}
然后,将新联系人插入排序后的联系人“列表”的方法可以重写为'\n'
:
private static final String NL = "\n";
static String insertContact(String contact, String data) {
String newSurname = getSurname(contact);
String newName = getName(contact);
StringTokenizer st = new StringTokenizer(data, NL);
StringBuilder sb = new StringBuilder();
boolean inserted = false;
while (st.hasMoreTokens()) {
String curr = st.nextToken();
String currSurname = getSurname(curr);
String currName = getName(curr);
if (!inserted && (currSurname.compareToIgnoreCase(newSurname) > 0 || (currSurname.compareToIgnoreCase(newSurname) == 0 && currName.compareToIgnoreCase(newName) > 0))) {
inserted = true;
System.out.println("Inserting before " + curr);
sb.append(sb.length() > 0 ? NL : "").append(contact);
}
sb.append(sb.length() > 0 ? NL : "").append(curr);
}
if (!inserted) {
sb.append(sb.length() > 0 ? NL : "").append(contact);
}
System.out.println("Data:\n" + sb);
System.out.println("---------");
return sb.toString();
}
测试:
String data = "1|Abercrombie|Peter|3063543030|john@gmail.com\n"
+ "2|Buffet|Anthony|3063543030|john@gmail.com\n"
+ "3|Dunty|Richard|3063543030|john@gmail.com";
data = insertContact("4|Doe|John|3063543030|john@gmail.com", data);
data = insertContact("5|Aaron|Paul|5551234567|apaul@breakingbad.com", data);
data = insertContact("6|Gilligan|Vince|5559123456|vinceg@breakingbad.com", data);
输出:
Inserting before 3|Dunty|Richard|3063543030|john@gmail.com
Data:
1|Abercrombie|Peter|3063543030|john@gmail.com
2|Buffet|Anthony|3063543030|john@gmail.com
4|Doe|John|3063543030|john@gmail.com
3|Dunty|Richard|3063543030|john@gmail.com
---------
Inserting before 1|Abercrombie|Peter|3063543030|john@gmail.com
Data:
5|Aaron|Paul|5551234567|apaul@breakingbad.com
1|Abercrombie|Peter|3063543030|john@gmail.com
2|Buffet|Anthony|3063543030|john@gmail.com
4|Doe|John|3063543030|john@gmail.com
3|Dunty|Richard|3063543030|john@gmail.com
---------
Data:
5|Aaron|Paul|5551234567|apaul@breakingbad.com
1|Abercrombie|Peter|3063543030|john@gmail.com
2|Buffet|Anthony|3063543030|john@gmail.com
4|Doe|John|3063543030|john@gmail.com
3|Dunty|Richard|3063543030|john@gmail.com
6|Gilligan|Vince|5559123456|vinceg@breakingbad.com
---------