Java 如何使用循环和字符统计字符串中不同字符的数量?

Java 如何使用循环和字符统计字符串中不同字符的数量?,java,Java,只有在所有字符都不同的情况下,这才能提供正确的输出,但在第一个索引字符后有一些重复字符时,输出失败。请指导如何计算字符串中的不同字符 public int diff(String str) { int count = 0; char ch = str.charAt(0); for (int i = 0; i < str.length(); i++) { if (ch != str.charAt(i)) { count++;

只有在所有字符都不同的情况下,这才能提供正确的输出,但在第一个索引字符后有一些重复字符时,输出失败。请指导如何计算字符串中的不同字符

public int diff(String str) {
    int count = 0;
    char ch = str.charAt(0);
    for (int i = 0; i < str.length(); i++) {
        if (ch != str.charAt(i)) {
            count++;
        }
    }
    return count+1;
}
}
public int diff(String str){
整数计数=0;
char ch=str.charAt(0);
对于(int i=0;i
一个明显的方法是收集集合中的可见字符,但使用排序字符数组可能更有效

char[] ary = str.toCharArray();
Arrays.sort(ary);
int count = 0, prev = -1;
for (char c : ary) if (c != prev) { count++; prev = c; }

您只需检查当前字符是否不在当前位置之前的字符串中

这应该可以做到:

public static int diff(String str) {
    int count = 0;
    for (int i = 0; i < str.length(); i++) {
        char current = str.charAt(i);
        if (!str.substring(0, i).contains(current+"")) {
            count++;
        }
    }
    return count;
}
publicstaticintdiff(stringstr){
整数计数=0;
对于(int i=0;i
您需要一种方法来记住目前遇到的字符。您可以将它们存储在一个集合中,如下所示:

public static int diff(String str) {
    Set<Character> chars = new HashSet<Character>();
    for (int i = 0; i < str.length() - 1; i++) {
        char ch = str.charAt(i);
        if (!chars.contains(ch)) {
            chars.add(ch);
        }
    }
    return chars.size();
}
publicstaticintdiff(stringstr){
Set chars=new HashSet();
对于(int i=0;i
您的问题是,您只是将当前字符与之前的字符进行比较,而没有将所有字符进行比较。您可以这样修复它:

 public int diff(String str) {
   int count = 0;
   // Loop through all the array
   for (int i = 0; i < str.length(); i++) {
      boolean seen = false
      // Loop trying to match all the previous with the current
      for(int j = 0; j < str.length(); j++) {
        if (str.charAt(i) == str.charAt(i)) {
            seen = true
        }
      }
      // Count it if it's not been seen before
      if seen == false {
         count++
      }
   }
   return count+1;
}
public int diff(String str){
整数计数=0;
//循环遍历所有数组
对于(int i=0;i
这样做的目的是尝试将当前字符
str.charAt(i)
与之前的所有字符匹配
str.charAt(j)
。如果不清楚,请告诉我


这不是最有效的方法,但我试图匹配您在代码中所做的,并解释它的错误之处。可能短数组会更快。

或多或少,你正试图用不同的问题来完成你的家庭作业请给我们举个例子?我正在尝试从字符串主题做一组问题这是我的想法。你太快了。这就是解决办法。记住已经检查过的字符。