2017-02-25 5 views
2

Ich wurde aufgefordert, ein Programm zu schreiben, um Werte in einem Zeichenfeld zu drucken. Dieses Array enthält doppelte Werte, aber die Ausgabe sollte keine doppelten Zeichen enthalten. Verwenden Sie nicht Set. Das habe ich erstellt. Lassen Sie mich wissen, ob es eine andere und effiziente Möglichkeit gibt, dasselbe zu tun.Wie kann man Zeichen im Zeichen-Array ohne Duplikat drucken?

public class RemoveDuplication { 
    public static void main (String[] args){ 
    char[] a= new char[]{'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c'}; 
    String s=Character.toString(a[0]); 

    for (int i=1; i<a.length; i++) { 
     if ((s.indexOf(a[i])) == -1) { 
     s = s + Character.toString(a[i]); 
     } else { 
     } 
    } 
    // if you want character array as result 
    char[] result = s.toCharArray(); 
    System.out.println(result); 
    } 
} 
+1

'System.out.println (Arrays.toString (Ergebnis));' –

+1

Hallo Elliott, Danke für den Vorschlag. Bitte beachten Sie, dass wir die 'println'-Methode überladen haben, die char-Array als Argument akzeptiert und eine Liste von Werten im char-Array ausgibt. – Vicky

Antwort

1

Sie sind übertrieben.

Gehen Sie einfach für:

StringBuilder builder = new StringBuilder().append(a[0]); 

und dann append() zu diesem Builder-Objekt; und am Ende; Anruf builder.toString(). Statt all der lustigen Dinge, die Sie mit dieser s Stringvariable machen.

Ihr Code, der zwischen String und Character hin- und hergeht und + für das Anhängen von Strings verwendet, ist wie gesagt; sehr komplizierte Dinge.

+0

Ja! Danke für deinen Vorschlag. Buddy (y) – Vicky

+0

Du bist herzlich willkommen ... und witziges Ding: Ich nahm an, du könntest kein Set benutzen, deshalb habe ich diesen Teil nicht erwähnt; wie du schon diesen Teil hast, um die Duplikate richtig zu finden ;-) – GhostCat

+0

Hi, wie kann man wissen, ob das angegebene Zeichen bereits im String Builder Objekt vorhanden ist? if ((s.indexOf (a [i])) == -1) Diese Codezeile ist nicht gültig, wenn s StringBuilder ist. – Vicky

1

Wenn Sie ein Set-Objekt verwenden, wird es das für Sie tun.

Set<Character> s = new HashSet<>(); 
s.add('c'); 
s.add('c'); 
//c was only added once 

dann wie folgt durchlaufen:

for(Character c: s) 
{ 
    System.out.println(c); 
} 
+0

Yeah! Es ist eine großartige Lösung, aber ich durfte nicht Set verwenden :( – Vicky

0

Stream die benötigten Zeichen, Filter nur unterschiedliche Codepunkte, dann sammeln Sie die Codepunkte in einem StringBuilder und schließlich ausdrucken:

System.out.println(
    str.chars().distinct().boxed() 
     .collect(Collector.of(StringBuilder::new, 
        StringBuilder::appendCodePoint, 
        StringBuilder::append))); 
0

Jedes Mal, wenn ich höre einzigartige Elemente, Sets kommt mir in den Sinn. Hier ist also die einfachste Implementierung mit sets:

char[] a= new char[]{'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c'}; 

Set<Character> set = new HashSet<Character>(); //declare Set of Character type 
for(char c : a) 
     set.add(c);   //Add chars in 'a' to the set 

System.out.println(set); 

OUTPUT: [a, b, c]

+0

Oh, scheint die Frage bearbeitet zu sagen ** nicht Sätze verwenden **, als ich die Antwort tippte. Seit seiner bereits geschrieben, denke ich, es ist in Ordnung, wenn es Überreste. –

0

Was könnten Sie tun dies, um Speedup etwas ist wie, ob das Zeichen C in dem ausgegebenen Zeichenarray A (nicht dem Druck) durch binäre Suche. Drucken Sie das Zeichen C, wenn es nicht in der Liste ist, und fügen Sie das Zeichen C in A ein (sortiert), um die binäre Suche verwenden zu können.

Verwandte Themen