![](/img/trans.png)
[英]Count the occurrence of each character in a string and put it in an array
[英]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.