`
miaoge
  • 浏览: 107545 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类

【String类】求字符串中有多少种字符,以及每种字符的重复次数(个数)?

阅读更多

统计某个字符串中有多少种字符,以及每个字符的个数:

   num为该字符串的初始长度,将字符串的第一个字符与后面的每个字符进行equals,

如果相等num--,然后用空字符串替换该字符;依次递归。

    charNum为字符个数。

/**
 * 求出字符串中有多少种字符,以及每个字符的个数?
 * @author 小苗
 *
 */
public class CountCharNum { 
	private int num;   //统计字符种类变量
	
	public CountCharNum(String str){
		this.num = str.length();
	}
	
	public int count(String str){
		int leng = str.length();
		if(leng == 0){
			return num;
		}else {
			String a = str.substring(0, 1);
			int charNum = 1;    //统计字符个数变量
			System.out.print("字符:"+a);
			for (int i = 1; i < str.length(); i++) {
				if(a.equals(str.substring(i, i+1))){
					num--;
					charNum++;
				}
			}
			System.out.println("  "+charNum);
			str = str.replace(a, "");
			count(str);   //用递归
		}
		return num;
	}
	
	public static void main(String[] args) {   
	  
	   String aString = "yekmaakkccekymbvbsf4w"; 
	   CountCharNum cc = new CountCharNum(aString);
	   System.out.println("共有字符类型:"+cc.count(aString));
	    }   
	}  

 

还有一种更简单的方法:

public void countChar(String str){
  int num=0;

  while(!"".equals(str)){
     String temp=str;
     System.out.print("字符:"+str.substring(0, 1));
     str=str.replaceAll(str.substring(0, 1), "");
     System.out.println(" "+temp.length()-str.length());
     num++;
  }
  
  System.out.println(" 字符种类数:"+num);
  
 }

 

1
1
分享到:
评论
3 楼 满手都是炸 2013-07-24  
同事面试遇到这个题目了
2 楼 miaoge 2010-10-09  
liumik 写道
以下是我的方法,供参考
import java.util.LinkedHashMap;
import java.util.Map;

public class CharCount {
	
	public Map<Character, Integer> countChar(String s, Map<Character, Integer> counts) {
		if (counts==null) {
			counts = new LinkedHashMap<Character, Integer>();
		}
		for (int i = 0; i<s.length(); i++) {
			char c = s.charAt(i);
			Integer count = counts.get(c);
			counts.put(c, (count==null ? 1 : count+1));
		}
		return counts;
	}

	public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i<2000; i++) {
       	 sb.append((char)i);
        }
        
		long t0 = System.currentTimeMillis();
		Map<Character, Integer> counts = new CharCount().countChar(sb.toString(), null);
		System.out.format("共有%1$d种字符,其中每种字符个数如下:\n", counts.size());
		for (Character c : counts.keySet()) {
			System.out.format("字符 %1$c %2$d\n", c, counts.get(c));
		}
		long t1 = System.currentTimeMillis();
		System.out.println(String.format("完成:%1$d ms", t1-t0));
	}
}


呵呵 很不错···谢谢朋友的分享,其实这题的目的只是让学生得到字符串字符种类的个数····
1 楼 liumik 2010-10-09  
以下是我的方法,供参考
import java.util.LinkedHashMap;
import java.util.Map;

public class CharCount {
	
	public Map<Character, Integer> countChar(String s, Map<Character, Integer> counts) {
		if (counts==null) {
			counts = new LinkedHashMap<Character, Integer>();
		}
		for (int i = 0; i<s.length(); i++) {
			char c = s.charAt(i);
			Integer count = counts.get(c);
			counts.put(c, (count==null ? 1 : count+1));
		}
		return counts;
	}

	public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i<2000; i++) {
       	 sb.append((char)i);
        }
        
		long t0 = System.currentTimeMillis();
		Map<Character, Integer> counts = new CharCount().countChar(sb.toString(), null);
		System.out.format("共有%1$d种字符,其中每种字符个数如下:\n", counts.size());
		for (Character c : counts.keySet()) {
			System.out.format("字符 %1$c %2$d\n", c, counts.get(c));
		}
		long t1 = System.currentTimeMillis();
		System.out.println(String.format("完成:%1$d ms", t1-t0));
	}
}

相关推荐

Global site tag (gtag.js) - Google Analytics