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

Posted

技术标签:

【中文标题】计算java字符串中特定出现的次数【英文标题】:Counting the number of specific occurrences in a java String 【发布时间】:2017-09-24 15:26:46 【问题描述】:

我正在尝试解决一个问题,我创建了一个方法来计算某个字符串中大写和小写(“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
    

【问题讨论】:

第一个错误s.length,第二个错误String s3 = s.charAt(i); “第一个错误”是什么意思。我应该把它改成什么? @OusmaneMahyDiaw 第一次更改为s.length(),第二次更改为String s3 = Character.toString(s.charAt(i));。 @ScaryWombat 在下面的 anwer 部分中提出了另一个好的解决方案。 【参考方案1】:

尝试更简单的解决方案

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

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

【讨论】:

这里非常直观的解决方案!【参考方案2】:

我收到的主要错误是“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 方法。然后在比较之前将Stream 中的每个String 转换为小写,如果有任何字符串匹配"a",我们保留它,否则我们忽略它,最后我们简单地返回计数。

public static int countA(String input)

    return (int)Arrays.stream(input.split("")).filter(s -> s.toLowerCase().equals("a")).count();

【讨论】:

【参考方案3】:

用于计算'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();

【讨论】:

【参考方案4】:

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

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

【讨论】:

以上是关于计算java字符串中特定出现的次数的主要内容,如果未能解决你的问题,请参考以下文章

JAVA经典题--计算一个字符串中每个字符出现的次数

java一个字符串中出现次数最多的字符以及次数

如何计算特定字母在字符串中出现的次数? (C++)

Java 数据结构及算法实战系列 016:HJ2 计算某字符出现次数

Java 数据结构及算法实战系列 016:HJ2 计算某字符出现次数

JAVA常见算法题(三十三)---求子串在字符串中出现的次数