Java >> Java Tutorial >  >> Tag >> String

Finden Sie doppelte Zeichen in einer Zeichenfolge mit dem Java-Programm „Repetition Count“.

In diesem Beitrag sehen wir ein Java-Programm, um doppelte Zeichen in einem String zusammen mit der Anzahl der Wiederholungen der Duplikate zu finden.

Das Auffinden doppelter Zeichen in einem String und das Wiederholungszählprogramm ist einfach mit einer HashMap zu schreiben Sie werden jedoch möglicherweise aufgefordert, es zu schreiben, ohne eine Java-Sammlung zu verwenden. Ab Java 8 können Sie diese Logik auch mit der Java Stream API schreiben . In diesem Beitrag werden wir alle diese Lösungen sehen.

Inhaltsverzeichnis
  1. Finde doppelte Zeichen in einem String, ohne eine Bibliothek zu verwenden
  2. Finde doppelte Zeichen in einem String mit HashMap
  3. Finde doppelte Zeichen in einem String mit Java Stream

Java-Programm, um doppelte Zeichen in einem String zu finden, ohne eine Bibliothek zu verwenden

Wenn Sie HashMap nicht verwenden, können Sie den übergebenen String in einer äußeren und inneren Schleife durchlaufen und prüfen, ob die Zeichen gleich sind oder nicht. Wenn gleich, dann erhöhe die Zählung. Falls Zeichen gleich sind, müssen Sie dieses Zeichen auch aus dem String entfernen, damit es in weiteren Iterationen nicht erneut gezählt wird.

public class DuplicateChars {

  public static void main(String[] args) {   
    findDuplicateCharsWithCount("kakatua parrot is a bird");
    System.out.println("------------");
    findDuplicateCharsWithCount("John was jealous");
    System.out.println("------------");
    findDuplicateCharsWithCount("rats");
  }
    
  private static void findDuplicateCharsWithCount(String str) {
    System.out.println("Duplicates in- "+ str);
    int count;
    for(int i = 0; i < str.length(); i++) {
      count = 1;
      //Take one char at a time
      char c = str.charAt(i);
      // don't count the spaces
      if(c == ' ') 
        continue;
      for(int j = i + 1; j < str.length(); j++) {
        if(c == str.charAt(j)) {
          count++;
          // remove the char so that it is not picked again
          // in another iteration
          str = str.substring(0, j) + str.substring(j+ 1);
        }
      }
      if(count > 1) {
        System.out.println(c + " found " + count + " times");
      }
    }
  }
}

Ausgabe

Duplicates in- kakatua parrot is a bird
k found 2 times
a found 5 times
t found 2 times
r found 3 times
i found 2 times
------------
Duplicates in- John was jealous
o found 2 times
a found 2 times
s found 2 times
------------
Duplicates in- rats

Java-Programm zum Finden doppelter Zeichen in einem String mit HashMap

Wenn Sie ein Java-Programm schreiben, um doppelte Zeichen in einem String zu finden und die Anzahl der Wiederholungen mit HashMap anzuzeigen, können Sie jedes Zeichen des Strings als Schlüssel speichern und die Anzahl als 1 beginnen, die zum Wert wird. Prüfen Sie bei jeder Iteration, ob der Schlüssel bereits existiert, wenn ja, dann erhöhen Sie den Zähler (durch Zugriff auf den Wert für diesen Schlüssel).

public class DuplicateChars {

  public static void main(String[] args) {    
    findDuplicateCharsWithCount("kakatua parrot is a bird");
    System.out.println("------------");
    findDuplicateCharsWithCount("John was jealous");
    System.out.println("------------");
    findDuplicateCharsWithCount("rats");
  }
    
  private static void findDuplicateCharsWithCount(String str) {
    System.out.println("Duplicates in- "+ str);
    char[] strArr = str.toCharArray();
    Map<Character, Integer> countMap = new HashMap<>();
    for(char c : strArr) {
      // We don't need to count spaces
      if(c == ' ')
        continue;
      if(countMap.containsKey(c)) {
        countMap.put(c, countMap.get(c) + 1);
      }else {
        countMap.put(c, 1);
      }
    }
    // Displaying the map values
    Set<Map.Entry<Character, Integer>> countSet = countMap.entrySet();
    for(Map.Entry<Character, Integer> entry  : countSet){
      if(entry.getValue() > 1) {
        System.out.println(entry.getKey() + " found " + entry.getValue() + " times");
      }
    }
  }
}

Ausgabe

Duplicates in- kakatua parrot is a bird
a found 5 times
r found 3 times
t found 2 times
i found 2 times
k found 2 times
------------
Duplicates in- John was jealous
a found 2 times
s found 2 times
o found 2 times
------------
Duplicates in- rats

Java-Programm zum Finden doppelter Zeichen in einem String mit Java Stream

Sie können auch Methoden der Java Stream API verwenden, um doppelte Zeichen in einem String zu erhalten. Es gibt eine Collectors.groupingBy()-Methode die verwendet werden kann, um Zeichen des Strings zu gruppieren, gibt die Methode eine Map zurück, in der das Zeichen zum Schlüssel wird und der Wert die Häufigkeit dieses Zeichens ist.

Dann wird diese Map iteriert, indem das EntrySet von der Map- und filter()-Methode von Java Stream abgerufen wird wird verwendet, um Leerzeichen und Zeichen mit einer Häufigkeit von 1 herauszufiltern.

Beachten Sie auch, dass die Methode chars() der Klasse String in dem Programm verwendet wird, das ab Java 9 verfügbar ist. Es wird verwendet, um String-Zeichen als IntStream zu erhalten.

import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class DuplicateCharCount {

  public static void main(String[] args) {
    String str = "kakatua parrot is a bird";
    duplicateCountInStream(str.chars());
  }
  
  private static void duplicateCountInStream(IntStream stream){
    Map<Character, Long> countMap = stream.mapToObj(c -> (char) c)
                .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
    countMap.entrySet().stream()
               .filter(es -> !es.getKey().equals(' ') && es.getValue() > 1)
               .forEach(es->{System.out.print("Character- " + es.getKey().toString() + " found ");

                   System.out.println(es.getValue() + " times");
                   });

  }
}

Ausgabe

Character- a found 5 times
Character- r found 3 times
Character- t found 2 times
Character- i found 2 times
Character- k found 2 times

Das ist alles für dieses Thema Doppelte Zeichen in einem String mit Java-Programm mit Wiederholungszähler finden . Wenn Sie Zweifel oder Vorschläge haben, hinterlassen Sie bitte einen Kommentar. Danke!


Java-Tag