compareToIgnoreCase ()를 사용하여 배열을 사용하지 않고 항목을 문자열의 하위 문자열과 비교

Nov 21 2020

내 과제에서 컬렉션과 배열을 사용하는 것은 금지되어 있습니다. String Tokenizer를 사용할 수 있지만 String 및 System 이외의 클래스는 허용되지 않습니다. 이 솔루션은 항목 수에 관계없이 작동해야합니다.

다음과 같은 문자열이 있습니다.

1|Aaron|Peter|3063543030|[email protected] + "\n" 
2|Buffet|Anthony|3063543030|[email protected] + "\n" 
3|Dunty|Richard|3063543030|[email protected] 

예를 들어 항목이 4|Doe|John|3063543030|[email protected]이면 compareToIgnoreCase ()를 사용하여 비교가 이루어지고 항목은 3 | Dunty | Richard | 3063543030 | john @ 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 인 경우에만 문자열에 항목을 삽입하는 것입니다.

누군가가 그 문제를 해결하도록 도와 주면 감사하겠습니다.

감사

답변

1 AlexRudenko Nov 21 2020 at 23:33

연락처의 성과 이름을 가져 오기 위해 다음 도우미 메서드가 구현되었다고 가정 해 보겠습니다.

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|[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);

산출:

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]
---------