package com.lyk; import java.util.HashMap; /** * @Date 2012-11-26 * @author LYJ * @Function 统计字符串中每个字符出现的次数 * */ public class CountString { int find(char []sc,int low,int high){ char key=sc[low]; while(low<high){ while(low<high&&(sc[high]+"").hashCode()>=(key+"").hashCode()) high--; sc[low]=sc[high]; while(low<high&&(sc[low]+"".hashCode())<=(key+"").hashCode()) low++; sc[high]=sc[low]; } sc[low]=key; return low; } void sort(char []sc,int low,int high){ if(low<high){ int j=find(sc, low, high); sort(sc, low, j-1); sort(sc, j+1, high); } } String getCountUseSort(String source){ char []sc=source.toCharArray(); sort(sc, 0, source.length()-1); String s; char flag=sc[0]; int count =1; StringBuilder countSbd=new StringBuilder(); for(int i=1;i<sc.length;i++) { if(sc[i]==flag){ count++; } else { s=flag+""+count; flag=sc[i]; count=1; countSbd.append(s); } } countSbd.append(flag+""+count); return countSbd.toString(); } String getCountUseMap(String source){ HashMap<Character, Integer> countMap=new HashMap<Character, Integer>(); char[]cr=source.toCharArray(); countMap.put(cr[0], 1); for(int i=1;i<=cr.length-1;i++) if(countMap.containsKey(cr[i])) countMap.put(cr[i], countMap.get(cr[i])+1); else countMap.put(cr[i], 1); String s=countMap.toString(); s=s.replaceAll("=", "").replace('{', ' ').replace('}', ' ').replace(',', ' ').replaceAll(" ", ""); return s.trim(); } String getCoutUseHash(String source){ char []ch=source.toCharArray(); int size=findMaxHash(ch); int []countAry=new int[size]; String []item=new String[size]; for(int i=0;i<=ch.length-1;i++) { int hsCode=(ch[i]+"").hashCode(); int len=hsCode-1; countAry[hsCode-1]+=1; item[len]=ch[i]+""; } StringBuilder sbd=new StringBuilder(); for(int i=0,len=countAry.length;i<len;i++){ if(countAry[i]!=0) { sbd.append(item[i]+""+countAry[i]); } } return sbd.toString(); } int findMaxHash(char []c){ int first=(c[0]+"").hashCode(); for(int i=1;i<=c.length-1;i++){ first=(c[i]+"".hashCode())>first?c[i]+"".hashCode():first; } return first; } public static void main(String[] args) { System.out.println(new CountString().getCountUseSort("李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李永李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李永克cc你你你爱cbabccc我爱你克cc你你你爱cbabccc我爱你我我我b李永克cc你你你爱cbabccc我爱你我b李永克cc你你你爱cbabccc我爱你我b李永克cc你你你爱cbabccc我爱你永克cc你你你爱cbabccc我爱你永aaaaaaaaaaaa克cc你你你爱cbabccc我爱你")); System.out.println(new CountString().getCountUseMap("李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李永李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李永克cc你你你爱cbabccc我爱你克cc你你你爱cbabccc我爱你我我我b李永克cc你你你爱cbabccc我爱你我b李永克cc你你你爱cbabccc我爱你我b李永克cc你你你爱cbabccc我爱你永克cc你你你爱cbabccc我爱你永aaaaaaaaaaaa克cc你你你爱cbabccc我爱你")); System.out.println(new CountString().getCoutUseHash("李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李永李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李永克cc你你你爱cbabccc我爱你克cc你你你爱cbabccc我爱你我我我b李永克cc你你你爱cbabccc我爱你我b李永克cc你你你爱cbabccc我爱你我b李永克cc你你你爱cbabccc我爱你永克cc你你你爱cbabccc我爱你永aaaaaaaaaaaa克cc你你你爱cbabccc我爱你")); } }
