计算java字符串中特定出现的次数

问题描述 投票:0回答:5

我正在尝试解决一个问题,我创建了一个方法来计算某个字符串中大写字母和小写字母(“A”或“a”)出现的次数。我已经研究这个问题一周了,我收到的主要错误是“char 无法取消引用”。谁能指出我在这个 Java 问题上的正确方向?谢谢。

class Main{ 
    public static int countA (String s)
    {
        String s1 = "a";
        String s2 = "A";
        int count = 0;
        for (int i = 0; i < s.length; i++){
            String s3 = s.charAt(i); 
            if (s3.equals(s1) || s3.equals(s2)){
                count += 1;
            }
            else{
                System.out.print("");
            }
        }
    }

   //test case below (dont change):
    public static void main(String[] args){
        System.out.println(countA("aaA")); //3
        System.out.println(countA("aaBBdf8k3AAadnklA")); //6
    }
}
java string count charat
5个回答
5
投票

尝试更简单的解决方案

String in = "aaBBdf8k3AAadnklA";
String out = in.replace ("A", "").replace ("a", "");
int lenDiff = in.length () - out.length ();

正如 @chris 在他的回答中提到的,字符串可以先转换为小写,然后只进行一次检查


4
投票

我收到的主要错误是“char 不能 解除引用”

更改此:

s.length  // this syntax is incorrect

对此:

s.length()  // this is how you invoke the length method on a string

另外,更改此:

String s3 = s.charAt(i);   // you cannot assign a char type to string type

对此:

String s3 = Character.toString(s.charAt(i));  // convert the char to string

以更简单的方式完成任务的另一种解决方案是使用

Stream#filter
方法。然后在比较之前将
String
中的每个
Stream
转换为小写,如果有任何字符串与
"a"
匹配,我们保留它,如果不匹配,我们忽略它,最后,我们简单地返回计数。

public static int countA(String input)
{
    return (int)Arrays.stream(input.split("")).filter(s -> s.toLowerCase().equals("a")).count();
}

4
投票

计算

'a'
'A'
在字符串中出现的次数:

public int numberOfA(String s) {
    s = s.toLowerCase();
    int sum = 0;
    for(int i = 0; i < s.length(); i++){
        if(s.charAt(i) == 'a')
            sum++;
    }
    return sum;
}

或者只是替换其他所有内容,看看你的字符串有多长:

int numberOfA = string.replaceAll("[^aA]", "").length();

1
投票

查找字符 aAstring 中出现的次数。

int numA = string.replaceAll("[^aA]","").length();

0
投票

Java 9+

您可以使用

Matcher#results
获得
Stream<MatchResult>
,然后使用
Stream#count
获得所需的结果。

演示

import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        String str = "aaBBdf8k3AAadnklA";
        String pattern = "[Aa]";
        System.out.println(
                Pattern.compile(pattern)
                        .matcher(str)
                        .results()
                        .count());
    }
}

输出

6

在线演示

[Aa]
是字符类正则表达式模式,表示
A
a
。从角色类教程了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.