如何计算字符串中字母的出现而不重复打印?

时间:2015-10-01 11:39:20

标签: java arrays string word charat

请尽可能运行代码

输入:"呜呜"
输出: 宽:2 ○:5 ○:5 ○:5 ○:5 ○:5 瓦特: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

3 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

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) + " ");
        }
    }
}

这将打印以下行:

输入Word

wooooow

w:2: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转换为整数并将其用作数组的索引。你也可以做这个反向整数 - &gt;炭。

这适用于Charset中的前1024个Chars。 Normaly theese都是大写,小写,数字和特殊字符。

答案 1 :(得分:0)

此答案仅适用于小写输入。对于大写,也可以使用大小为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

答案 2 :(得分:0)

您可以尝试这样的事情

            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+"  ");
            }
相关问题