1. Statistiques le nombre de lettres de cordes (et garder l'ordre alphabétique)
Par exemple: aabbbbbbbba oh bcab cdabc deaaa
Il y a 5 façons que je connais. Si vous en avez de meilleurs, donnez-moi quelques conseils.
// Méthode 1 public static void LetterCount1 (String S) {s = s.replaceAll ("+", ""); // 1, converti en caractéristique de caractères char C [] = s.tocharArray (); Map <caractère, entier> arbre = new Treemap <caractère, entier> (); pour (int i = 0; i <c.length; i ++) {// premier: a, 1 // deuxième fois: a, 2 // 2, obtenez la valeur correspondant à la valeur entière de clé = arbre.get (c [i]); // décompiler: valeur entière = (entier) arbre.get (caractère.valueof (c [i])); // 3, stocker l'arbre de jugement.put (c [i], valeur == null? 1: valeur + 1); } // Si le format de résultat est requis: a (5) b (4) c (3) d (2) e (1) StringBuilder sbu = new StringBuilder (); pour (clé de caractère: arbre.KeySet ()) {Integer Count = Tree.get (Key); sbu.append (key) .append ("("). APPEND (count) .append (")"); } // Convertir SBU en chaîne System.out.println (sbu.toString ());} // Méthode 2 Utiliser Stream // Ce sera incorrect lors du test des caractères spéciaux, tels que // n, et son ordre sera incorrect. Ceci est causé par MAP // Utilisation de la solution Treemap public static void LetterCount2 (String S) {s = s.replaceALL ("+", ""); Treemap <string, long> result = arrays.stream (s.split ("")) .sorted () // .collect (collectionners.groupingBy (function.identity (), collecors.counting ())); .Collect (Collectors.GroupingBy (function.Identity (), Treemap :: New, Collectors.Counting ())); System.out.println (résultat); } // Méthode 3 Utiliser Collection.Frequency // En fait, il s'agit de transformer la chaîne en collection pour enregistrer chaque chaîne, et comparer chaque chaîne avec la collection publique statique void LetterCount3 (chaîne s) {s = s.replaceALL ("+", ""); List <string> list = arrays.aslist (s.split ("")); Map <String, Integer> map = new Treemap <String, Integer> (); for (String str: list) {map.put (str, collections.frequency (list, str));} System.out.println (map); } // Méthode 4 public static void LetterCount4 (String S) {s = s.replaceAll ("+", ""); String [] strS = s.split (""); Map <String, Integer> map = new Treemap <String, Integer> (); for (String str: strs) {map.put (str, stringCount (s, str));} System.out.println (map); } // Méthode 5 public static void LetterCount5 (String S) {s = s.replaceAll ("+", ""); String [] strS = s.split (""); Map <String, Integer> map = new Treemap <String, Integer> (); for (String str: strs) {map.put (str, stringCount2 (s, str));} System.out.println (map); } // Utiliser Split Public static int stringCount (String maxstr, String substr) {// note // 1. Par exemple, si qqqq n'est pas trouvé, alors la chaîne sera retournée directement // 2. Par exemple, qqqjava, il n'y a pas d'autres caractères à la fin, et il ne sera pas divisé à l'heure Rempli automatiquement // 4. Pour des caractères spéciaux, veuillez prêter attention à l'utilisation du caractère d'échappement int count = (maxstr + "") .split (substr) .length - 1; // System.out.println ("/" "+ Minstr +" / "" + "Nombre de chaînes occurrences:" + count); Retour Count;} // Si vous voulez être un cas-invensitif, une comprimé (Minst StringCount2 (String MaxStr, String substr) {int count = 0; Matcher m = motive.compile (substr) .matcher (maxstr); while (m.find ()) {count ++;} return count;}2. Statistiques Le nombre de mots dans une chaîne (anglais uniquement)
C'est en fait la même chose que ci-dessus, et seule une méthode simple est écrite ci-dessous
public static void wordStringCount (String S) {// Le début est une chaîne, et après avoir divisé, il devient un flux de chaîne. Map <string, long> result = arrays.stream (s.split ("// s +")) .map (word -> word.replaceAll ("[^ a-za-z]", "")) .collect (collecors.groupingBy (function.identity (), collecors.counting ())); System.out.println (résultat); }3. Statistiques Le nombre de mots texte (anglais uniquement)
// Recherchez le nombre de mots dans un texte public static void wordFileCount (String Path) lève ioException {// Le flux de chaîne est le premier au début // Split First // en un flux de caractères // map de filtre <String, long> result = files.lines (paths.get (path), Charset.defaultCharset ()) .Parall () // Stand Stream-Split-stand Stream.flatmap (str-> arrays.stream (str.split ("+"))) .map (word -> word.replaceAll ("[^ a-za-z]", "")) // supprimer vide.filter (word-> word.length ()> 0) .Collèle (collection System.out.println (résultat); }4. Autres non pertinents
Nous savons que les listes de paramètres variables peuvent être transmises sans passer par des paramètres.
pour
public void testName () {System.out.println ("a"); } public void testName (string ... s) {// aucun paramètre n'est passé, s initialisera un objet par défaut System.out.println ("b"); }Que dois-je imprimer lors de l'appel TestName ()? Il imprimera A et correspondra automatiquement à la méthode où le paramètre est vraiment vide
Le résumé ci-dessus de plusieurs méthodes pour Java8 pour compter le nombre de lettres de chaîne (recommandée) est l'intégralité du contenu partagé par l'éditeur. J'espère que cela pourra vous donner une référence et j'espère que vous pourrez soutenir Wulin.com plus.