У меня есть строка, которая выглядит так:
String myString =
"1|name|lastname|email|tel" + "\n" +
"2|name|lastname|email|tel" + "\n" +
"3|name|lastname|email|tel" + "\n" +
"4|name|lastname|email|tel" + "\n";
В моем задании я не могу использовать массивы или другие классы, кроме String
и System
.
Мне нужно упорядочить имена в алфавитном порядке, используя метод compareTo
.
У меня есть метод, который извлекает имя из строки:
public static String getContactName (String contact) {
StringTokenizer tokenizer = new StringTokenizer(contact, "|");
String id = tokenizer.nextToken();
String name = tokenizer.nextToken();
return name;
}
У меня есть другой метод, который вставляет контакт в строку. Именно здесь я должен использовать метод compareTo
.
public static String insertContactInString (String myString, String line) {
int resultat = 0;
String nomContact = "";
String nomCarnet = "";
String contact = "";
if (myString != null) {
myString += line + "\n";
do {
nomContact = getContactName(line);
nomCarnet = getContactName(myString);
resultat = nomContact.compareToIgnoreCase(nomCarnet);
if(resultat < 0) {
line = "|" + nomContact;
int pipe = line.lastIndexOf("|");
contact =contactLigne.substring(0,pipe);
line = contact;
line = "|" + nomCarnet;
pipe = line.lastIndexOf("|");
contact = line.substring(0,pipe);
line = contact;
} else {
contact = "|" + nomCarnet;
int pipe = contact.lastIndexOf("|");
contact =contact.substring(0,pipe);
contact = contact;
contactLigne = "|" + nomContact;
pipe = contactLigne.lastIndexOf("|");
contact = contactLigne.substring(0,pipe);
contactLigne = contact;
}
} while (resultat > 0);
myString += line + "\n";
System.out.println(myString);
}
return myString;
}
Я был бы признателен, если бы кто-нибудь помог мне с моим кодом, потому что теперь каждая подстрока не упорядочена в алфавитном порядке в String.
То, что я пытаюсь сделать в методе insertContactInString
, использует getContactName
для сравнения имени, содержащегося в параметре строки, который передается в параметре, с именем, содержащимся в myString
, с использованием того же метода getContactName
.
Для сравнения обеих строк myString
не должно быть пустым и содержать хотя бы одну запись.
После этого я использую compareToIgnoreCase
для сравнения обеих строк и сохраняю результат в переменной resultat
.
Здесь я использую оператор if, чтобы проверить, меньше ли resultat
нуля. В этом случае nomContact
должно быть вставлено перед nomCarnet
, а если resultat
больше нуля, то nomCarnet
должно быть первым, за которым следует nomContact
.
Однако то, что я не могу сделать, это объединить подстроку имени, возвращаемую getContactName
, со строкой в myString
.
Например, если resultat
меньше нуля, я хочу вставить в myString
строку, содержащую nomContact
, перед строкой, содержащей nomCarnet
таким образом, чтобы myString
в конце выглядело так:
String myString =
"3|nomContact|lastname|email|tel" + "\n" +
"2|nomCarnet|lastname|email|tel" + "\n" +
"1|name|lastname|email|tel" + "\n" +
"4|name|lastname|email|tel" + "\n";
nom = имя на английском языке
get
конкретной строки иset
конкретной строки для заданного значения. А также разбейте свой код на более мелкие методы в более общем плане, его трудно читать и отлаживать прямо сейчас. - person markspace   schedule 21.11.2020StringTokenizer
. Вы имеете в виду, что вы не можете использовать объекты типа коллекции, такие как массивы иArrayList
, но другие классы в порядке? Будет ли вход всегда иметь 4 записи или ваше решение должно работать для любого количества записей? - person Paul   schedule 21.11.2020