Verwenden von compareToIgnoreCase (), um einen Eintrag mit einem Teilstring in einer Zeichenfolge zu vergleichen, ohne ein Array zu verwenden
In meiner Aufgabe ist es verboten, Sammlungen und Arrays zu verwenden. Wir dürfen String Tokenizer verwenden, aber andere Klassen als String und System sind nicht erlaubt. Diese Lösung muss mit einer beliebigen Anzahl von Einträgen arbeiten.
Ich habe eine Zeichenfolge, die so aussieht:
1|Aaron|Peter|3063543030|[email protected] + "\n"
2|Buffet|Anthony|3063543030|[email protected] + "\n"
3|Dunty|Richard|3063543030|[email protected]
Wenn der Eintrag beispielsweise 4|Doe|John|3063543030|[email protected] lautet, wird der Vergleich mit compareToIgnoreCase () durchgeführt und der Eintrag wird kurz vor 3 | Dunty | Richard | 3063543030 | john @ gmail eingefügt. com
Hier habe ich eine Methode, die den Eintragsnamen erhält und String Tokenizer verwendet:
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;
}
Bei dieser Methode füge ich den Eintrag in die Zeichenfolge ein und führe den Vergleich mit compareToIgnoreCaseMethod () durch.
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;
}
Was ich vorerst ohne Erfolg versuchen möchte, ist, den Eintrag nur dann in eine Zeichenfolge einzufügen, wenn das Ergebnis des Vergleichs gleich 1 oder 0 ist.
Ich würde mich freuen, wenn mir jemand helfen könnte, dieses Problem zu lösen.
Vielen Dank
Antworten
Nehmen wir an, dass die folgenden Hilfsmethoden implementiert sind, um den Nachnamen und den Namen des Kontakts abzurufen:
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();
}
Dann kann das Verfahren zum Einfügen eines neuen Kontakts in eine sortierte "Liste" von Kontakten, die durch getrennt '\n'
sind, wie folgt umgeschrieben werden:
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();
}
Prüfung:
String data = "1|Abercrombie|Peter|3063543030|[email protected]\n"
+ "2|Buffet|Anthony|3063543030|[email protected]\n"
+ "3|Dunty|Richard|3063543030|[email protected]";
data = insertContact("4|Doe|John|3063543030|[email protected]", data);
data = insertContact("5|Aaron|Paul|5551234567|[email protected]", data);
data = insertContact("6|Gilligan|Vince|5559123456|[email protected]", data);
Ausgabe:
Inserting before 3|Dunty|Richard|3063543030|[email protected]
Data:
1|Abercrombie|Peter|3063543030|[email protected]
2|Buffet|Anthony|3063543030|[email protected]
4|Doe|John|3063543030|[email protected]
3|Dunty|Richard|3063543030|[email protected]
---------
Inserting before 1|Abercrombie|Peter|3063543030|[email protected]
Data:
5|Aaron|Paul|5551234567|[email protected]
1|Abercrombie|Peter|3063543030|[email protected]
2|Buffet|Anthony|3063543030|[email protected]
4|Doe|John|3063543030|[email protected]
3|Dunty|Richard|3063543030|[email protected]
---------
Data:
5|Aaron|Paul|5551234567|[email protected]
1|Abercrombie|Peter|3063543030|[email protected]
2|Buffet|Anthony|3063543030|[email protected]
4|Doe|John|3063543030|[email protected]
3|Dunty|Richard|3063543030|[email protected]
6|Gilligan|Vince|5559123456|[email protected]
---------