2017-03-14 4 views
-2
import java.util.ArrayList; 
import java.util.Arrays; 

public class Test20{ 

    public static void main(String args[]){ 
    String str="Hello java Hello python Hello testing Hello java"; 
    ArrayList<String> list=new ArrayList<String>(); 
    String s[]=str.split(" "); 

    String p=s[0]; 
    list.add(p); 

    for(int i=1;i<s.length;i++){ 

     if(!(p==s[i])){ 
     list.add(s[i]); 
     } 
     p=s[i]; 
    }//i 

    for(int i=0;i<list.size();i++){ 
     System.out.println(list.get(i)); 
    } 
    } 
} 

Ich möchte dieses Ergebnis erhalten:Programm, um eindeutige Wörter aus einer Zeichenfolge zu erhalten? warum dieser Druck alle Wörter

Hello 
java 
python 
testing 
+0

Denken Sie daran, dass Sie '==' nicht verwenden können, um Strings in Java zu vergleichen. Sie müssen '.equals()' verwenden. –

+0

Dies ist nichts wirklich wichtig, aber nur etwas zu lesen: http://StackOverflow.com/Questions/129178/Difference-between-int-array-and-int-array –

+0

Warum nicht einfach eine 'Set' Schnittstelle implementieren? Das Entfernen von Duplikaten ist ziemlich kostenlos. – KodeSeeker

Antwort

1

Sie können nur die contains Methode des ArrayList verwenden.

for (int i = 1; i < s.length; i++) { 
    if (!(list.contains(s[i]))) { 
     list.add(s[i]); 
    } 
} 

bearbeiten: Und es gibt keine Notwendigkeit, eine spezielle Behandlung für das erste Wort zu tun. Sie können die for-Schleife einfach mit dem Index 0 starten und die zwei Zeilen über der Schleife auslassen.

+0

danke guyzzz @CocoNess –

+0

thnkss ................ –

1

List s (einschließlich ArrayList) erlauben Duplikate.

sie vermeiden Sie entweder die contains Methode verwenden können, bevor das Hinzufügen ...

if (!list.contains(s[i])) { 
    list.add(s[i]); 
} 

zu überprüfen ... oder stattdessen ein Set (wie HashSet) verwenden, die doppelten Einträge implizit verwirft.

0

Logik ist falsch in der Lösung. Sie vergleichen nur die Wörter nebeneinander. Stattdessen müssen Sie überprüfen, ob es in der Liste vorhanden ist. Sie können HashSet auch verwenden, um eindeutig zu werden.

String s[] = str.split(" "); java.util.Set result = new java.util.HashSet(java.util.Arrays.asList(s)); System.out.println(result);

1

Hier ist meine Lösung. Verwenden Sie ein Set und lassen Sie Java die ganze Arbeit für Sie erledigen.

public static void main(String args[]){ 

    String str="Hello java Hello python Hello testing Hello java"; 
    Set<String> myset=new HashSet<>(); 
    String s[]=str.split(" "); 

    for(int i=1;i<s.length;i++){ 

      myset.add(s[i]); 

    } 

    for (String sss: myset){ 

     System.out.println(sss); 

    } 
} 

} 
0

Wenn Sie Ihre eigene Implementierung verwenden (die zur Verfügung gestellte diejenige etwas sauberer ist) und für Ihr Beispiel der einzigartigen Worte zu drucken.

Sie müssen nur diese Zeile entfernen:

for(int i=1;i<s.length;i++){ 

     if(!(p==s[i])){ 
     list.add(s[i]); 
     } 
     p=s[i]; // REMOVE 
    }//i 

wenn Sie p halten zu ändern, was in Ihrem Code ist Hallo, die Worte, die immer wiederholt, wird die Prüfung nie funktionieren. Dies wird nicht funktionieren, um Duplikate in allen Zeichenfolgen zu finden, nur Ihre Beispielzeichenfolge.

Verwandte Themen