Java中字符串的频率计数器

Java中字符串的频率计数器,java,string,frequency,Java,String,Frequency,我有一个字符串,用户将键入它来表示时间。i、 e“10:05” 我已经搜索了一段时间,找不到搜索此字符串的方法来查找特定的数字。我之所以需要这个数字,是因为我需要获取每个数字,并使用算法来发现在数字时钟上显示这个数字需要多少功率。为此,我需要每个数字的频率。例如,如果时间是10:05,数字0将出现2次,我可以将其乘以必要的数字,以发现所需的功率。我相信有一种更有效的方法可以做到这一点,但是: String test = "10:05"; char[] array = test.toCharAr

我有一个
字符串
,用户将键入它来表示时间。i、 e“10:05”


我已经搜索了一段时间,找不到搜索此
字符串的方法来查找特定的数字。我之所以需要这个数字,是因为我需要获取每个数字,并使用
算法
来发现在数字时钟上显示这个数字需要多少功率。为此,我需要每个数字的频率。例如,如果时间是10:05,数字0将出现2次,我可以将其乘以必要的数字,以发现所需的功率。

我相信有一种更有效的方法可以做到这一点,但是:

String test = "10:05";

char[] array = test.toCharArray();
int counter = 0;

for(char c : array) {
   if (c.Equals('0')) {
       counter++;
   }
}

System.out.println("The number '0' appears " + counter + " times."); //2

创建一个映射,其中包含要作为键的数字以及每个数字显示为值的频率。在字符串中逐个字符地迭代,忽略非数字字符,在执行过程中增加数字频率映射

例如:

HashMap<Integer, Integer> num_freq = new HashMap<>();

String input = "10:05"; // Example input

char[] input_chars = input.toCharArray();

for(char c : input_chars){
    // Accept only characters that are digits
    if(Character.isDigit(c)){
        // Grabs digit from character

        int num = Character.digit(c, 10);

        // Put 1 into map if no entry exists, else increment existing value

        num_freq.compute(num, (k_num, freq) -> freq == null ? 1 : freq + 1);
    }
}

// Print result out

num_freq.forEach((num, freq) -> {
    System.out.println("Digit " + num + " appears " + freq + " time(s)");
});
HashMap num_freq=new HashMap();
字符串输入=“10:05”;//示例输入
char[]input_chars=input.toCharArray();
for(字符c:输入字符){
//仅接受数字字符
if(字符isDigit(c)){
//从字符中获取数字
int num=字符数字(c,10);
//如果不存在条目,则将1放入映射中,否则增加现有值
num_freq.compute(num,(k_num,freq)->freq==null?1:freq+1);
}
}
//打印结果
数字频率forEach((数字,频率)->{
System.out.println(“数字”+num+“显示”+freq+“时间”);
});

如果我收到了你的问题,我希望下面的代码能起作用-

int[] powerArr   = {2,3,2,3,2,3,2,3,2,3};
String input = "10:05";
int powerConsumption = 0;

for(char c : input.replace(":", "").toCharArray()) {
    powerConsumption = powerConsumption + powerArr[Integer.parseInt(String.valueOf(c))];
}
功耗:总功耗
电源阵列:显示0的电源阵列,然后显示1的电源阵列。。。显示电源9

如果您只对发生的次数感兴趣,那么-

int[] counterArr = {0,0,0,0,0,0,0,0,0,0};
String input = "10:05";
int tmpVal = 0;

for(char c : input.replace(":", "").toCharArray()) {
    tmpVal = Integer.parseInt(String.valueOf(c));
    counterArr[tmpVal] = counterArr[tmpVal]+1;
}
计数器arr的第一个值将表示0的出现,第二个值表示1的出现,依此类推。

这对我来说是有效的:(假设时间总是以xx:yy格式输入)


迭代每个字符,在数字处停止,并将结果frequency number stat存储在带有K,V pair:number,frequency的映射中。每次你碰到一个数字,都会增加频率数字值。我不知道它,所以你想要一些这样的工作:输入10:05,输出:1:在时间上,0:2的时间和3:1的时间。考虑“<代码> ToCARARCUDS或<代码> CARAT < /Cord>获取字符串中的单个字符。如果ASCII分别映射0到9,这将容易得多。/:这仍然非常简单,只需使用
String.length()
创建一个字符串大小的循环,然后在循环中调用
String.charAt(int)
(人们建议您使用
tocharray()
,但请记住,该方法返回一个新对象。如果多次调用此方法,请使用
charAt
 public static void main(String args[])
    {
        String time = "10:07"; //User Input
        time = time.replace(":", "");
        char digit[] = {time.charAt(0), time.charAt(1), time.charAt(2), time.charAt(3)};
        int[] count = new int[digit.length];
        Arrays.sort(digit);

        for (int i = 0; i < digit.length; i++)
        {
            count[i]++;
            if (i + 1 < digit.length)
            {
                if (digit[i] == digit[i + 1])
                {
                    count[i]++;
                    i++;
                }
            }
        }

        for (int i = 0; i < digit.length; i++)
        {
            if (count[i] > 0)
            {
                System.out.println(digit[i] + " appears " + count[i]+" time(s)");
            }
        }
    }
0 appears 2 time(s)
1 appears 1 time(s)
7 appears 1 time(s)