Как посчитать частоту символов в строке? - PullRequest
25 голосов
/ 16 июля 2011

Мне нужно написать какой-то цикл, который может считать частоту каждой буквы в строке.
Например: «aasjjikkk» будет считать 2 «a», 1 «s», 2 «j», 1 «i», 3 «k».В конечном счете, идентифицируем, как они, чтобы в конечном итоге на карте с символом в качестве ключа и счетчиком в качестве значения.Любая хорошая идея, как это сделать?

Ответы [ 23 ]

0 голосов
/ 04 апреля 2016

Сокращенный возможный код с использованием HashMap.(Без принудительного сохранения строки)

private static Map<Character, Integer> findCharacterFrequency(String str) {

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

        for (char ch : str.toCharArray()) {
            /* Using getOrDefault(), since Java1.8 */
            map.put(ch, map.getOrDefault(ch, 0) + 1);
        }
        return map;
    }
0 голосов
/ 16 июля 2011

Если это не нужно для сверхбыстрого, просто создайте массив целых чисел, по одному целому числу на каждую букву (только буквенные значения, поэтому 2 * 26 целых чисел? Или любые двоичные данные возможны?). просматривайте строку по одному символу за раз, получите индекс ответственного целого числа (например, если у вас есть только буквенные символы, у вас может быть 'A' с индексом 0 и получить этот индекс путем вычитания любого 'A' к 'Z' на «A» просто как пример того, как вы можете получить достаточно быстрые индексы) и увеличить значение в этом индексе.

Существуют различные микрооптимизации, чтобы сделать это быстрее (при необходимости).

0 голосов
/ 11 декабря 2018
package com.dipu.string;

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

public class RepetativeCharInString {
    public static void main(String[] args) {
        String data = "aaabbbcccdddffffrss";
        char[] charArray = data.toCharArray();
        Map<Character, Integer> map = new HashMap<>();
        for (char c : charArray) {
            if (map.containsKey(c)) {
                map.put(c, map.get(c) + 1);
            } else {
                map.put(c, 1);
            }
        }
        System.out.println(map);

    }
}
0 голосов
/ 28 февраля 2014

Это похоже на ответ xunil154, за исключением того, что строка сделана как массив символов, и для поддержания порядка вставки символов используется связанная хэш-карта.

String text = "aasjjikkk";
char[] charArray = text.toCharArray();
Map<Character, Integer> freqList = new LinkedHashMap<Character, Integer>();

        for(char key : charArray) {
            if(freqList.containsKey(key)) {
               freqList.put(key, freqList.get(key) + 1);
            } else
                freqList.put(key, 1);
        }
0 голосов
/ 16 июля 2011

Вы можете использовать Hashtable с каждым символом в качестве ключа, и общее количество становится значением.

Hashtable<Character,Integer> table = new Hashtable<Character,Integer>();
String str = "aasjjikkk";
for( c in str ) {
    if( table.get(c) == null )
        table.put(c,1);
    else
        table.put(c,table.get(c) + 1);
}

for( elem in table ) {
    println "elem:" + elem;
}
0 голосов
/ 21 ноября 2017

Пожалуйста, попробуйте приведенный ниже код, надеюсь, он вам поможет,

import java.util.Scanner;

class String55 {
    public static int frequency(String s1,String s2)
    {

        int count=0;
        char ch[]=s1.toCharArray();
        char ch1[]=s2.toCharArray();
        for (int i=0;i<ch.length-1; i++)
        {



                int k=i;

                int j1=i+1;
                int j=0;
                int j11=j;
                int j2=j+1;
                {
                    while(k<ch.length && j11<ch1.length && ch[k]==ch1[j11])
                    {
                    k++;
                    j11++;

                    }


                int l=k+j1;
                int m=j11+j2;
                if( l== m)
                {
                    count=1;
                    count++;
                }





        }
        }
        return count;


    }
    public static void main (String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("enter the pattern");
        String s1=sc.next();
            System.out.println("enter the String");
            String s2=sc.next();
            int res=frequency(s1, s2);
            System.out.println("FREQUENCY==" +res);

    }
}

ОБРАЗЕЦ ВЫХОДА: введите шаблон человек введите строку dhimanman ЧАСТОТЫ == 2

Спасибо. Счастливое кодирование.

0 голосов
/ 08 июля 2014
import java.io.FileInputStream;
import java.util.HashSet;
import java.util.Iterator;
public class CountFrequencyOfCharater {
public static void main(String args[]) throws Exception
{
    HashSet hs=new HashSet();
    String str="hey how are you?";
    char arr[]=new char[str.length()];
    for(int i=0;i<str.length();i++)
    {
        arr[i]=str.charAt(i);
    }
    for(int j=0;j<str.length();j++)
    {
        int c=0;
        for(int k=0;k<str.length();k++)
        {
            if(arr[j]==arr[k])
            c++;
        }
        hs.add(arr[j]+"="+c+",");
    }
        Iterator it=hs.iterator();
        while(it.hasNext())
        {
             System.out.print(it.next());
        }
  }
}
0 голосов
/ 21 сентября 2018

Вопрос: Возьмите строку пользователем и получите частоту каждого символа. !!!!!!!!!!

import java.util.HashMap;
import java.util.Scanner;
public class FrequencyPrograme {
    public static void main(String str[]){
        HashMap<Character,Integer> frequency=new HashMap<Character,Integer>();
        Scanner inputString=new Scanner(System.in);
        System.out.print("Please enter the string.");
        String String  =inputString.next();
        for(int i=0; i<String .length();i++){
            char ch=String .charAt(i);
            Integer value=frequency.get(ch);
            if(value!=null){
                frequency.put(ch, new Integer(value+1));
            }else{
                frequency.put(ch, 1);
            }
        }
        System.out.println(frequency);
    }
}
0 голосов
/ 30 августа 2014
NOTE, this will also count the frequencies of empty spaces


import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;


public class FrequenceyOfCharacters {

    public static void main(String[] args) {
        System.out.println("Please enter the string to count each character frequencey: ");
        Scanner sc=new  Scanner(System.in);
        String input=sc.nextLine();
        frequenceyCount(input);


    }

    private static void frequenceyCount(String input) {

        Map<Character,Integer> hashCount=new HashMap<>();
        Character c;
        for(int i=0; i<input.length();i++)
        {
           c =input.charAt(i);
           if(hashCount.get(c)!=null){
               hashCount.put(c, hashCount.get(c)+1);
           }else{
               hashCount.put(c, 1);
           }
        }
        Iterator it = hashCount.entrySet().iterator();
        System.out.println("char : frequency");
        while (it.hasNext()) {
            Map.Entry pairs = (Map.Entry)it.next();
            System.out.println(pairs.getKey() + " : " + pairs.getValue());
            it.remove(); 
        }

    }

}
0 голосов
/ 08 февраля 2019
*import java.util.ArrayList;
import java.util.Collections;

public class Freq {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String temp="zsaaqaaaaaaaabbbbbcc";
    List<String> temp1= new ArrayList<String> ();
    ArrayList<Integer>freq=new ArrayList<Integer>();
    for(int i=0;i<temp.length()-1;i++)
    {       
        temp1.add(Character.toString(temp.charAt(i)));      
    }
    Set<String> uniqset=new HashSet<String>(temp1);
    for(String s:uniqset)
    {
        freq.add(Collections.frequency(temp1, s));
        System.out.println(s+" -->>"+Collections.frequency(temp1, s));
    }
    }

}
           ------Output-------
       a -->>10
       b -->>5
       c -->>1
       q -->>1
       s -->>1
       z -->>1

Использовать частотный метод сбора для подсчета частоты символа *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...