如何在字符串中查找不同字符的数量

时间:2015-08-20 08:56:23

标签: java string character distinct

我必须计算字符串中不同字符数字的字母数,因此在这种情况下,计数将为 - 3(dks)。

鉴于以下String

String input;
input = "223d323dk2388s";
count(input);

我的代码:

public int  count(String string) {
        int count=0;
        String character = string;
        ArrayList<Character> distinct= new ArrayList<>();
        for(int i=0;i<character.length();i++){
            char temp = character.charAt(i);
            int j=0;
            for( j=0;j<distinct.size();j++){

                if(temp!=distinct.get(j)){

                    break;
                }

            }

            if(!(j==distinct.size())){
                distinct.add(temp);

            }
        }

        return distinct.size();
    }

输出:3

是否有任何本地库可以返回该字符串中存在的字符数?

4 个答案:

答案 0 :(得分:2)

一种方法是维护一个数组,然后将其填满并得到总数。这将检查所有字符,包括特殊字符和数字。

boolean []chars = new boolean[256];

String s = "223d323dk2388s";
for (int i = 0; i < s.length(); ++i) {
  chars[s.charAt(i)] = true;
}

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

System.out.println(count);

如果您只想计算字母的数量,不包括数字和特殊符号,那么这里有另一种选择。请注意,大写字母和小字母不同。

boolean []chars = new boolean[56];
String s = "223d323dk2388szZ";
for (int i = 0; i < s.length(); ++i) {
    char ch = s.charAt(i);
    if (ch >=65 && ch <= 90) {
        chars[ch - 'A'] = true;
    } else if (ch >= 97 && ch <= 122) {
        chars[ch - 'a' + 26] = true; //If you don't want to differentiate capital and small differently, don't add 26
    }
}
int count = 0;
for (int i = 0; i < chars.length; ++i) {
    if (chars[i]) count++;
}
System.out.println(count);

另一种方法是使用Set。

String s = "223d323dk2388s";
Set<Character> set = new HashSet<Character>();
for (int i = 0; i < s.length(); ++i) {
    set.add(s.charAt(i));
}
System.out.println(set.size());

如果您不想要数字和特殊符号。

String s = "223d323dk2388s";
Set<Character> set = new HashSet<Character>();
for (int i = 0; i < s.length(); ++i){
    char ch = s.charAt(i);
    if ((ch >= 65 && ch <= 90) || (ch >= 97 && ch <= 122))
        set.add(s.charAt(i));
}
System.out.println(set.size());

答案 1 :(得分:2)

使用java 8很容易。你可以使用这样的东西

return string.chars().distinct().count();

答案 2 :(得分:0)

String s=sc.next();
 String p="";
 char ch[]=s.toCharArray();
 for(int i=0;i<s.length();i++)
 {
     for(int j=i+1;j<s.length();j++)
     {
         if(ch[i]==ch[j])
         {
             ch[j]=' ';
         }
     }
     p=p+ch[i];
     p = p.replaceAll("\\s",""); 
 }

    System.out.println(p.length());

答案 3 :(得分:0)

致那些来这里寻找 Kotlin 解决方案的人:

val countOfDistinctCharacters = string.toCharArray().distinct().size