簡體   English   中英

如何計算char數組中每個字符的出現次數?

[英]How to count the occurrence of each character in char array?

我正在嘗試計算字符數組中每個字符的出現次數。 特定的小寫或大寫字母出現多少次? 當我不斷地兜圈子並陷入錯誤時,什么是有效的方法?

這是我用來用隨機字符填充數組的代碼:

char[] chararray = new char[1000]; 
   for (int i = 0; i < chararray.length; i++) { 
       char c = randomCharacter();
       chararray[i] = c;  
   }//end for  

我已經嘗試創建第二個數組來計算大寫和小寫,例如,但我不確定如何處理它:

int[] counter = new int[52];

任何形式的幫助將不勝感激。 謝謝你。

這是一個使用 Java 8 流的相對簡單的方法

Character[] charArray = new Character[1000];
IntStream.rand(0, charArray.length)
    .forEach(n -> charArray[n] = randomCharacter());
Map<Character, Long> charCountMap = Arrays.stream(charArray)
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting());

這為您留下了從每個字符到它在數組中出現的次數的映射。

忘記效率,除非您每秒處理數十億個字符,或者您試圖在 90 年代的數字手表上運行它。

假設您只關心英文字母字符。 Java 中的char類型實際上是一個整數,因此您可以使用 for 循環來遍歷范圍,例如

for( char c='a'; c<='z'; c++) {
   for( char x : chararry ) {
        if( c == x ) {
           // increment your counter for 'c'
        }
   }
}

對大寫字符使用類似的循環。

現在只是存放櫃台的問題。 我建議使用一個數組,其中數組中的每個索引都對應於您的字符值之一。 您可以編寫一個非常簡單的方法來將 ASCII 字符值轉換為數組的 0-51 之間的索引。

public void count(char[] chararray) {
    Map<Character, Integer> map = new HashMap<>();
    for (Character character : chararray) {
        Integer characterCount = map.get(character);
        if(characterCount == null) {
            characterCount = 0;
        }
        characterCount++;
        map.put(character, characterCount);
    }
    System.out.println(map);
}
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class CountOccurencesOfLetters {

    public static void main(String[] args) 
    {
        String s=" abhiabhiabhiabhiabhi";
        countOcccurence(s);
    }
    private static void countOcccurence(String input)
    {
        Map<String, Integer> map = new HashMap<String, Integer>();
        String[] tokens =input.split("");
        for (int i = 0; i < tokens.length; i++) 
        {
            String string = tokens[i];
            if(map.containsKey(string))
            {
                int value=map.get(string);
                value++;
                map.put(string, value);
            }
            else
            {
                map.put(string, 1);
            }
        }
        Set<Entry<String,Integer>> entryset = map.entrySet();
        for(Entry<String,Integer> entry: entryset)
        {
            System.out.print(entry.getKey()+entry.getValue());
        }
    }
}

有很多方法可以得到想要的結果。 下面是一種方法,試試吧----

package com.test;

import java.util.HashMap;
import java.util.Map;

public class CharCountInArray {

public static void main(String[] args) {
    char[] arr ;
    arr = new char[]{'a', 'b', 'c', 'a', 'b', 'c', 'd','a', 'b', 'c', 'a', 'b', 'c', 'd','a', 'b', 'c', 'a', 'b', 'c', 'd','a', 'b', 'c', 'a', 'b', 'c', 'd','a', 'b', 'c', 'a', 'b', 'c', 'd'};

    Map<Character, Integer> m = new HashMap<Character, Integer>();

    for(int i = 0; i< arr.length; i++){

        if(m.containsKey(arr[i])){

            m.put(arr[i], m.get(arr[i]) + 1);
        }
        else {
            m.put(arr[i], 1);
        }
    }
    System.out.println(m);
}
}
public class Array_Test {

public static void main(String[] args) {
   char[] c={'a','$','a','f','f','$','d','a','6','f','6','e','r','e','#','y','y','#','a','g','r','g'};
   int char_counter=0;      
   char [] c_distinct=new char[c.length];    
   boolean contains=false;
   int index_counter=0;

      for( int i=0;i<=c.length-1;i++)
      {
          if(i==0)
          {
          c_distinct[index_counter]=c[0];
          index_counter++;
          }
          else
          {
          contains=false;
          for(int k=0;k<=c.length-1;k++)
          {
              for(int f=0;f<=index_counter;f++)
              {
                  if(c_distinct[f]==c[i])
                  contains=true;    
              }                  
          }
          if(contains==false)
          {
              c_distinct[index_counter]=c[i];
              index_counter++;                  
          }
          }
      }

      System.out.println(c);
      System.out.println(c_distinct);

      for(int a=0;a<=index_counter-1;a++)
      {
          char_counter=0;
          for(int b=0;b<=c.length-1;b++)
          {

              if(c_distinct[a]==c[b])
              {
                  char_counter++;
              }
          }
          System.out.println(c_distinct[a]+" "+char_counter);
      }                     
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM