2017-09-17 4 views
0

Ich versuche, Zeichenfolgen aus einer Datei mit Merge-Sort und Insertion-Sort zu sortieren. Ich habe den Sortierbereich gemacht, aber ich bin auf dem Teil fest, wo ich alle doppelten Wörter entfernen muss. Kurz gesagt, ich muss die Ausführungszeit aus Zusammenführen und Einfügen sort drucken, um die Zeichenfolge aus einer Datei zu sortieren, während duplizierte Wörter entfernt werden.Doppeltes Wort aus einer Zeichenkette löschen

FRANKENSTEIN

MARY

Wollstonecraft

SHELLEY

LETTER

TO

So sieht die TXT-Datei aus, enthält aber mehr als 15.000 Wörter. Ich kann den Teil nicht herausfinden, wo ich die verdoppelten Wörter entfernen muss und es dann sortieren.

Vielen Dank im Voraus

ergeSort pb = new ergeSort(); 
    try { 

     BufferedReader br = new BufferedReader(new FileReader("test.txt")); 
     List<String> l = new ArrayList<String>(); 
     String line; 

     while ((line = br.readLine()) != null) { 
      l.add(line); 

     } 
     br.close(); 

     String[] arre = l.toArray(new String[]{}); 

     startTime = System.currentTimeMillis(); 

     (new ergeSort()).MergeSort(arre); 
     removeDuplicate(arre); 
     for(String h : arre){ 
      System.out.println(h); 
     } 

     endTime = System.currentTimeMillis(); 
     long executionTime1 = endTime - startTime; 
     startTime = System.currentTimeMillis(); 

     inSort(arre); 
     removeDuplicate(arre); 

     endTime = System.currentTimeMillis(); 
     long executionTime2 = endTime - startTime; 

     System.out.println("The execution time of Merge sort after duplicated words are removed is: " + executionTime1 + "ms"); 
     System.out.println("The execution time of Insertion sort after duplicated words are removed is: " + executionTime2 + " ms"); 
     System.out.println("The number of words remaining after removal of duplicated: " + arre.length); 


    } catch (Exception e) { 
     e.printStackTrace(); 
     System.out.println("Incorrect File"); 

    } 
} 
public static class ergeSort { 

    public static void MergeSort(String[] arr) { 
     if (arr.length > 1) { 
      String[] firstHalf = new String[arr.length/2]; 
      System.arraycopy(arr, 0, firstHalf, 0, arr.length/2); 
      MergeSort(firstHalf); 

      String[] secondHalf = new String[arr.length - arr.length/2]; 
      System.arraycopy(arr, arr.length/2, secondHalf, 0, arr.length - arr.length/2); 
      MergeSort(secondHalf); 

      merge(firstHalf, secondHalf, arr); 

     } 
    } 

    public static void merge(String[] arr1, String[] arr2, String[] temp) { 

     int a = 0; 
     int b = 0; 

     for (int i = 0; i < temp.length; i++) { 
      if (b >= arr2.length || (a < arr1.length && arr1[a].compareToIgnoreCase(arr2[b]) < 0)) { 
       temp[i] = arr1[a]; 
       a++; 
      } else { 
       temp[i] = arr2[b]; 
       b++; 
      } 
     } 
    } 
} 

public static String[] inSort(Comparable[] arr) { 
    Comparable temp; 

    for (int i = 0; i < arr.length; i++) { 
     for (int j = i; j > 0; j--) { 
      if (arr[j].compareTo(arr[j - 1]) < 0) { 
       temp = arr[j]; 
       arr[j] = arr[j - 1]; 
       arr[j - 1] = temp; 

      } 

     } 

    } 
    return (String[]) arr; 
} 

public static void removeDuplicate(String[] words) { 
    { 
     List<String> q = new ArrayList<String>(); 

     for (int i = 0; i < words.length; i++) { 
      if (words[i] != null) { 

       for (int j = i + 1; j < words.length; j++) //Inner loop for Comparison 
       { 

        if (words[i].compareToIgnoreCase(words[j])) //Checking for both strings are equal 
        { 
         q.add(words[i]); 
        } 

       } 
      } 

     } 
    } 

} 

}

+0

warum nicht TreeSet verwenden? http://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html – IddoE

+0

Verwenden Sie eine Art von 'Set', lesen Sie die Datei und speichern Sie sie, um Duplikate zu entfernen – MadProgrammer

Antwort

0

Ersetzen Liste mit Set, und dann ohne dupliziert String String Array erhalten.
Set ist eine Sammlung, die keine doppelten Elemente enthält.

ergeSort pb = new ergeSort(); 
try { 
    BufferedReader br = new BufferedReader(new FileReader("test.txt")); 
    Set<String> s = new HashSet<String>(); 
    String line; 

    while ((line = br.readLine()) != null) { 
     s.add(line); 
    } 
    br.close(); 
    String[] arre = s.toArray(new String[]{}); 
    //... 
} 
// ... 
Verwandte Themen