在Java字符串中查找字符出现的次数

20

我想要统计一个字符串中某个字符出现的次数,例如我有字符串 "aaaab",我该如何计算其中字母"a"的数量?


8
看起来您给这个问题打上了 regex 标签。记住,有些人面对问题会想:“嘿,我来用正则表达式解决!”现在他们有两个问题了。 - Greg Hewgill
@Greg 只有当人们不恰当地使用正则表达式(就像在这个问题中一样)时,才会出现这个问题。 - NullUserException
任何解决方案都可以,但我对在正则表达式中看到一个解决方案很感兴趣。 - Steffan Harris
如何计算字符串中字符出现的次数? - Jonik
16个回答

1
这是我的逻辑...
public class OccurenceOf_Character {

    public static void main(String[] args) {

        Scanner input=new Scanner(System.in);       
        System.out.println(" Enter a string");

        String str = input.nextLine();      
        System.out.println(" Enter a character");       

        String character=input.next();      
        int l = character.length();

        char c=character.charAt(0);

        int count=0;        
        for(int i=0;i<str.length();i++)
        {
            if(str.charAt(i) == c)
            {
                count=count+1;
            }   
        }

        System.out.println(count); 
    }
}

1

您可以简单地使用这个:

String a = "i am here as junior java programmer";
Set temp = new HashSet();
char[] chararray=a.toCharArray();
Set temp=new HashSet();
for(int i=0;i<chararray.length;i++)
{
    int  count=0;
    for (int j=0;j<chararray.length;j++) {
        if (chararray[i]==chararray[j]) {
            count++;
        }            
    }
    if (temp.add(chararray[i])!=false)
        System.out.println("Character "+chararray[i]+" occur "+count);

}

1
这似乎过于复杂了。一个循环遍历字符就可以解决了。此外,这个问题已经相当老了。最好不要重新激活旧的线程,除非回答对之前的答案有显著的改进。 - Leigh

1
String s1="parasanna";

StringBuffer sb=new StringBuffer();
boolean print = false;
for (int i=0; i<s1.length(); i++){
    int count=1;
    char c=s1.charAt(i);
    sb.append(c);
    for (int j=1; j<sb.length(); j++) {
        char c2=sb.charAt(j-1);
        if (c==c2) {
            count++;
        }
    }

    System.out.println(c+"=="+count);

}

1
您可以使用Apache Commons提供的StringUtils类。 StringUtils.countMatches(String originalString, String subCharacterSequesnce)函数可用于计算原始字符串中子字符串出现的次数。

这已经被建议过了(https://dev59.com/jW865IYBdhLWcg3wivKj#3764010)。 - Alan Moore

1

Java 8

方法1 - 获取单个字符的出现次数

    String sentence = "Aaron ate apples upon a rock";

    long counted = IntStream.range(0, sentence.length())
            .filter(i->sentence.charAt(i) == 'a')
            .count();
    System.out.println("First approach: " + counted);

方法2 - 允许指定字符

    String sentence = "Aaron ate apples upon a rock";

    BiFunction<String, Character, Long> counter = (s,c) -> {
        return IntStream.range(0, s.length())
                .filter(i->s.charAt(i) == c)
                .count();
    };
    System.out.println("Second approach (with 'a'): " + counter.apply(sentence, 'a'));
    System.out.println("Second approach (with 'o'): " + counter.apply(sentence, 'o'));

方法三 - 计算所有字符的出现次数

     String sentence = "Aaron ate apples upon a rock";

     Map<Character, Long> counts = IntStream.range(0, sentence.length())
             .mapToObj(i->sentence.charAt(i))
             .collect(Collectors.groupingBy(o->o, Collectors.counting()));      

     System.out.println("Third approach for every character... ");
     counts.keySet().stream()
        .forEach(key -> System.out.println("'" + key + "'->" + counts.get(key)));

0
public static void main(String[] args) throws IOException
    {
        //String s1="parasanna";
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("enter string:");
        String s1 = br.readLine();
        StringBuffer sb=new StringBuffer(s1);

        while(sb.length() != 0)
        {
           char c = sb.charAt(0);
           int cnt = 0;
           for(int i=0; i< sb.length(); i++)
           {
           if(c == sb.charAt(i))
           {
               cnt++;
               sb.deleteCharAt(i);
               i--;
           }

           }

           System.out.println(c + "     occurance is:" + cnt);
        }

    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接