如何在不重复打印的情况下计算字符串中字母的出现次数?

How to count the occurrences of a letter in a String without duplication in printing?

如果可能请运行代码

输入: "wooooow"
输出: w:2 o:5 o:5 o:5 o:5 o:5 w:2

我希望结果是:w:2 o:5

我已经尝试了几个 ifs 和循环来实现它,但我做不到,是否有语法?或任何东西

import java.util.Scanner;

public class test {
    public static void main( String[] args ){

        String sWord= new String();
        int nCtr,nCtr2,nTemp=0,n,n1=0,n2=0,n3=0;
        char cTemp=' ',cTemp2=' ';      
        Scanner input = new Scanner(System.in);
        System.out.println("Enter a Word");
        sWord = input.nextLine();
        n = sWord.length();
        char[] cArray = new char[n];
        cArray = sWord.toCharArray();

        for(int ctr=cArray.length;ctr>0;ctr--){
            for(nCtr=0;nCtr<cArray.length;nCtr++){
                if(cArray[nCtr]==sWord.charAt(n1)){     
                    nTemp++;
                }
            }//for


            cTemp = cArray[n2];


            for(nCtr2=0;nCtr2<n;nCtr2++){
                if(sWord.charAt(nCtr2)=='$'){       
                    n3++;
                } 
            }//for

            System.out.println("# of occurence of " + cTemp + " is " + nTemp);

            n1++;
            n2++;   
            nTemp=0;
        }//for minus        


    }//

}//class

此答案仅适用于小写输入。对于大写字母,也使用大小为 46 的数组。

您必须通过创建新数组或其他一些数据结构来自己跟踪事件的发生。另外,我认为你的循环效率不高。

import java.util.Scanner;

public class Temp {
  public static void main( String[] args ){

    String sWord= new String();
    int nCtr,nCtr2,nTemp=0,n,n1=0,n2=0,n3=0;
    char cTemp=' ',cTemp2=' ';
    Scanner input = new Scanner(System.in);
    System.out.println("Enter a Word");
    sWord = input.nextLine();
    n = sWord.length();
    char[] cArray = new char[n];
    cArray = sWord.toCharArray();

    int[] countsOfChars = new int[26];

    for(int ctr=cArray.length;ctr>0;ctr--){
      for(nCtr=0;nCtr<cArray.length;nCtr++){
        if(cArray[nCtr]==sWord.charAt(n1)){
          nTemp++;
        }
      }//for


      cTemp = cArray[n2];


      for(nCtr2=0;nCtr2<n;nCtr2++){
        if(sWord.charAt(nCtr2)=='$'){
          n3++;
        }
      }//for

//      System.out.println("# of occurence of " + cTemp + " is " + nTemp);
      countsOfChars[cTemp - 'a'] = nTemp;

      n1++;
      n2++;
      nTemp=0;
    }//for minus

    for(int i=0; i<26; i++){
      if(countsOfChars[i] != 0) {
        System.out.println("# of occurence of " + (char)('a'+i) + " is " + countsOfChars[i]);
      }
    }


  }//

}//class

您可以尝试这样的操作:

import java.util.HashMap;
import java.util.Scanner;

public class test {
    public static void main( String[] args ){
        String sWord= new String();
        Scanner input = new Scanner(System.in);
        System.out.println("Enter a Word");
        sWord = input.nextLine();

        HashMap<Character, Integer> charCount = new HashMap<Character, Integer>();

        for(Character c : sWord.toCharArray()) {
            if(charCount.containsKey(c)) {
                charCount.put(c, charCount.get(c)+1);
            } else {
                charCount.put(c, 1);
            }
        }

        for(Character key : charCount.keySet()) {
            System.out.print(key + ":" + charCount.get(key) + " ");
        }
    }
}

这将打印以下行:

输入一个词

哇哦

w:2 o:5

应该适用于大写、小写、数字……您可以保存在字符串中的所有内容。

编辑: 不使用 HashMap:

public static void main( String[] args ){
        String sWord= new String();
        Scanner input = new Scanner(System.in);
        System.out.println("Enter a Word");
        sWord = input.nextLine();

        int[] cArr = new int[1024];

        for(char c : sWord.toCharArray()) {
            if((int) c <= cArr.length) {
                cArr[(int) c]++;
            }
        }

        for(int x = 0; x < cArr.length; x++) {
            if(cArr[x] > 0) {
                System.out.print((char) x + ":" + cArr[x]);
            }
        }
    }

这是可行的,因为您可以将 char 转换为整数并将其用作数组的索引。您也可以执行此反向整数 -> char.

这将适用于您的字符集中的前 1024 个字符。通常这些都是大写、小写、数字和特殊字符。

你可以试试这样的

            string str = "wooooow";
            Dictionary<char, int> table = new Dictionary<char, int>();
            foreach (char ch in str.ToCharArray())
            {
                int count = 0;
                if (table.TryGetValue(ch, out count))
                {
                    table[ch] = count + 1;
                }
                else
                {
                    table.Add(ch, 1);
                }
            }

            foreach (var item in table)
            {
                Console.Write(item.Key + ":" + item.Value+"  ");
            }