2017-09-08 3 views
0

Ich habe einige meiner Java-Anwendung definiert Strings, etwa so:Überprüfen Sie, ob String Teil andere Zeichenfolge enthält Java

m3 = "T, V, E"; 
m2 = "T, W, E"; 

als Beispiel.

Jetzt muss ich überprüfen, welche Teile der Strings übereinstimmen. Also in diesem Fall würde ich eine Zeichenfolge m4, die T, E enthält, als Ergebnis haben.

In diesem Fall zum Beispiel:

m1 = "A, S"; 
m3 = "T, V, E"; 

i eine leeren wollen würde (aber deklarierte) Zeichenfolge.

Oder gibt es einen besseren Weg, es mit einer anderen Methode als mit Strings zu tun? Ich deklariere diese Saiten tatsächlich von Hand. Wäre ein Array besser? Wenn ja, wie könnte ich das mit Arrays machen?

+5

, was Sie bisher bekommen haben? Dies ist nur Ihre Aufgabe – Stultuske

+0

@Stultuske Ich versuchte wie substr() zu überprüfen, aber im Grunde das ist nicht was ich will, weil ich die "einzelnen Buchstaben" überprüft werden muss (getrennt durch ein Komma) und nicht die "Zeichenfolge" – nameless

+3

es klingt wie du willst die Schnittmenge von zwei Sätzen. (Es gibt eine Collection-Klasse für Set) –

Antwort

4

In Java 8 können Sie wie unten gehen:

String s1 = "T,V,E"; 
    String s2 = "T,W,E"; 

    List<String> l1 = Arrays.asList(s1.split(",")); 
    List<String> l2 = Arrays.asList(s2.split(",")); 

    List<String> result = l1.stream().filter(l2::contains).collect(Collectors.toList()); 

    System.out.println(String.join(",", result)); 

Das Ergebnis ist "T, E" wie erwartet.

1

Sie können dies auf viele Arten erreichen. Eine der Möglichkeiten ist die Verwendung Set.

Zuerst spaltete m1 die Zeichen durch (Komma), und fügen Sie HashSet. Dann teilen Sie die m2 Zeichen und fügen Sie es ArrayList. Jetzt durch die for-Schleife versuchen, die ArrayList Zeichen zu HashSet hinzuzufügen. Sie erhalten false von der add-Methode (Set.add()), wenn sie nicht hinzugefügt wird (weil das Zeichen bereits vorhanden ist). Wenn Sie falsch antworten, drucken Sie das Zeichen oder fügen Sie es einer anderen ArrayList hinzu.

 String m3 = "T, V, E"; 
     String m2 = "T, W, E"; 

     Set<String> set = new HashSet<>(Arrays.asList(m3.split(","))); 
     List<String> list = Arrays.asList(m2.split(",")); 
     for (String s : list) { 
      if (!set.add(s)) { 
       System.out.println(s); 
      } 
     } 

Ergebnis wird T und E

0

Wenn alle Ihr String dieses Muster folgen: ..., ..., ...., könnte man sich geteilt und nur jedes String filtern, die in den beiden Arrays enthalten ist.
Sie können sie dann sammeln in einem List und verbinden sie mit ,:

List<String> commonStrings = Arrays.stream(m2.split(",\\s")) 
     .flatMap(s-> Arrays.stream(m3.split(",\\s")) 
     .filter(s2.equals(s)))   
     .collect(Collectors.toList()); 

String joinedString = String.join(",", commonStrings); 

Beachten Sie, dass dieser Code die genaue Zahl nicht zurückgibt der Vorkommen in den beiden String s entspricht.
Wenn also eine String zwei A enthält und die andere A, erhalten Sie zwei A im Ergebnis.
Wenn es nicht wichtig ist und Sie nur unterscheidbare String erhalten möchten, können Sie distinct() vor collect() aufrufen.

Ansonsten die genaue Zahl zurück das Vorkommen gleich, während der Verarbeitung, sobald ein String Teil (A zum Beispiel) verbraucht wird, als die beiden Teile in dem beide String s gleich sind, könnten Sie neue String s erstellen von der tatsächlichen String s aber durch Entfernen dieses String Teils.

1

Die entsprechende Datenstruktur ist festgelegt.

Set<String> m3 = new TreeSet<>(); 
    Collections.addAll(m3, "T", "V", "E"); 
    Collections.addAll(m3, "T, V, E".split(",\\s*")); // Alternatively. 

    Set<String> m2 = new HashSet<>(); 
    Collections.addAll(m2, "T", "W", "E"); 

    Set<String> m5 = new TreeSet<>(m2); 
    m5.retainAll(m3); 

Java 9: ​​

Set<String> m3 = Set.of("T", "V", "E"); 
    Set<String> m2 = Set.of("T", "W", "E"); 
0

Sie die split() Funktion wie die folgende

String a="A, B, C, D"; 
     String b="B, C, D"; 
     String[] a_chars =a.split(", "); //returns array with A B C D 
     String[] b_chars =b.split(", "); //returns array with B C D 

diese whay Sie haben zwei Arrays aus Strings jetzt können Sie sie verwenden können, vergleichen 2 mit (für) Schleifen

String result=""; 
     for(int c=0;c<a_chars.length;c++) 
     { 
      for(int d=0;d<b_chars.length;d++) 
      { 
       if(a_chars[c].equals(b_chars[d])) 
       { 
        result+=a_chars[c]+", "; 
       } 
      } 
     } 

jetzt Sie die Ergebniszeichenfolge haben wie dieser result="B, C, D, "

Überprüfung der Länge der Folge größer als Null ist wenn so die LASE 2 Zeichen zu löschen, die ,

if(result.length()>0)result=result.substring(0,result.length()-2); 

, wenn die Länge der Ergebniszeichenfolge sind Null, daß Mittel es gibt keine übereinstimmenden Buchstaben, so dass keine Änderung erforderlich ist

0

Zeichenfolge s1 = "T, V, E"; String s2 = "T, W, E";

List<String> l1 = Arrays.asList(s1.split(",")); 
List<String> l2 = Arrays.asList(s2.split(",")); 

List<String> result = l1.stream().filter(l2::contains).collect(Collectors.toList()); 

System.out.println(String.join(",", result)); 

Ergebnis = T & E Diese gute Antwort wird Ihnen werde ich auch diese

Verwandte Themen