Упорядочить строку по имени без использования массива в Java

У меня есть строка, которая выглядит так:

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 = имя на английском языке


person AlexCorDev    schedule 21.11.2020    source источник
comment
Это довольно безумно, и мне кажется, что это просто занятая работа. Лично я бы вообще отказался от этого задания. Что касается кода, вы, возможно, захотите сделать свою строку более массивной, например, с помощью методов для get конкретной строки и set конкретной строки для заданного значения. А также разбейте свой код на более мелкие методы в более общем плане, его трудно читать и отлаживать прямо сейчас.   -  person markspace    schedule 21.11.2020
comment
Вы написали: ... Я не могу использовать массивы или другие классы, кроме String и System, а вы используете StringTokenizer. Вы имеете в виду, что вы не можете использовать объекты типа коллекции, такие как массивы и ArrayList, но другие классы в порядке? Будет ли вход всегда иметь 4 записи или ваше решение должно работать для любого количества записей?   -  person Paul    schedule 21.11.2020
comment
Запрещено использовать коллекции и любые массивы. Нам разрешено использовать String Tokenizer, но не разрешены любые другие классы, кроме String и System. Решение должно работать с любым количеством записей.   -  person AlexCorDev    schedule 21.11.2020
comment
Например, если запись 4|Doe|John|3063543030|[email protected], а в строке уже есть эти две подстроки:   -  person AlexCorDev    schedule 22.11.2020
comment
1|Аарон|Питер|3063543030|[email protected]+\n 2|Шведский стол|Энтони|3063543030|[email protected]+\n 3|Данти|Ричард|3063543030|[email protected] +\n   -  person AlexCorDev    schedule 22.11.2020
comment
4|Doe|John|3063543030|[email protected] будет сравниваться и вставляться перед 3|Dunty|Richard|3063543030|[email protected]   -  person AlexCorDev    schedule 22.11.2020
comment