public class CountString { public static void main(String[] args) { String str = "yekmaakkccekymbvb"; char[] arr = str.toCharArray(); int []c = new int[26];
for(int i = 0 ; i < arr.length ;i ++){ ++ c[(int)arr[i] - 'a']; } int j = 0; for(int i = 0 ;i < c.length ; i ++){ if(c[i] > 0){ System.out.print((char)(i + 'a')); System.out.print(" "); System.out.println(c[i]); j ++; } } System.out.println("此字符串共包含" + j + "个字符。"); }}
那不就26个字母么,遍历对比下就OK了啊。
import java.util.*;
import java.util.Collections;public class LetterCount
{
public void getLetterCount(String str)
{
ArrayList<String> lists = new ArrayList<String>();
HashSet<String> hset = new HashSet<String>();
char[] ss = str.toCharArray();
for(int i=0; i<ss.length; i++)
{
lists.add(String.valueOf(ss[i]));
hset.add(String.valueOf(ss[i]));
}
System.out.println("共有字母"+hset.size()+"个!"); Collections.sort(lists);
Iterator it = hset.iterator();
while(it.hasNext())
{
String os = (String)it.next();
int begin = lists.indexOf(os);
int last = lists.lastIndexOf(os);
int count = last-begin+1;
System.out.println("字母"+os+": 共"+count+"个");
}
} public static void main(String[] args)
{
LetterCount lc = new LetterCount();
lc.getLetterCount(args[0]);
}
}
我的运行结果:
D:\backup\myclass>java LetterCount yekmaakkccekymbvb
共有字母8个!
字母k: 共4个
字母m: 共2个
字母a: 共2个
字母c: 共2个
字母y: 共2个
字母b: 共2个
字母v: 共1个
字母e: 共2个解决后,请结贴!
{
public static void main(String[] args)
{
HashMap<String, Integer> map = new HashMap();
String str = args[0];
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
String key = ch + "";
Integer count = map.get(ch + "");
map.put(key, map.get(key) == null ? 1 : ++count);
}
Set<String> set = map.keySet();
System.out.println("共有字母"+map.size()+"个");
for (String key : set) {
System.out.println("字母" + key + ":共" + map.get(key) + "个");
} }
}
如果是我做,我想到的方法是,把a-Z作为26+26=52的数组a=[0,0,0,0,0,0,0,0,0,0,0...]
然后遍历字符串,对于每个数都减去a得到ASCII值,对应相加,例如:
a[c-a]=a[2]+1=1
所以:a=[0,0,1,0,0,0...],遍历字符串可以得到个数。
再取出就好了。
时间复杂度为n而已,快了一倍,呵呵!~不知道有没有更好的办法呢?
import java.util.Iterator;
import java.util.Set;public class StringL {
private HashMap<String,Integer> hashMap = new HashMap<String,Integer>();
public void getString(String s){
String str ;
for(int i=0;i<s.length();i++){
str = s.substring(i,i+1);
if(hashMap.containsKey(str)){
int j=hashMap.get(str);
hashMap.remove(str);
hashMap.put(str, j+1);
}else{
hashMap.put(str, 1);
}
}
}
public void getHashMap(){
Set<String> strings = hashMap.keySet();
Iterator<String> it = strings.iterator();
for(String ss:strings){
ss = it.next();
System.out.println(ss+":"+hashMap.get(ss));
}
} /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
StringL sl =new StringL();
sl.getString("yekmaakkccekymbvb");
sl.getHashMap();
}}
while (str.Length > 0)
{
System.out.println(string.Format("{0}:{1}个",str[0],str.Length-str.Replace(str[0].ToString(),"").Length));
str = str.Replace(str[0].ToString(), "");
}
public class NetWork1 {
public static void main(String[] args) {
while(true){
System.out.println("请输入你的字符串:");
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
try {
String str=reader.readLine();
count(str);
} catch (IOException e) {
e.printStackTrace();
}
}
} public static void count(String str) {
Map<Character ,Integer> m=new TreeMap<Character,Integer>();
char[] chars = str.toCharArray();
for (char c : chars) {
Integer num=m.get(c);
num=(num==null)?num=1:++num;
m.put(c, num);
}
System.out.println("字符的种类:"+m.size());
Set<Character> set=m.keySet();
for(Character ch:set){
System.out.println("字符"+ch+"有"+m.get(ch)+"个");
}
}}
String str="yekmaakkccekymbvb";
char[] ch=str.toCharArray();
Map map=new HashMap();
for(int i=0;i<ch.length;i++){
map.put(ch[i],(Integer)map.get(ch[i])==null?a:(Integer)map.get(ch[i])+1);
}
System.out.println(map);
}
public static void main(String[] agrs){
String str="asrwofalsfjaowieurnasdfhadhiof";
while(!"".equals(str)){
String c=str.substring(0,1);
String tempStr=str.replace(c,"");
System.out.println(c+" : "+(str.length()-tempStr.length()));
str=tempStr;
}
}
我也贴一份,处理问题优雅一点。
public class CountString { public static void main(String[] args) {
String str = "yekmaakkccekymbvb";
char[] arr = str.toCharArray();
int []c = new int[26];
for(int i = 0 ; i < arr.length ;i ++){
++ c[(int)arr[i] - 'a'];
}
int j = 0;
for(int i = 0 ;i < c.length ; i ++){
if(c[i] > 0){
System.out.print((char)(i + 'a'));
System.out.print(" ");
System.out.println(c[i]);
j ++;
}
}
System.out.println("此字符串共包含" + j + "个字符。");
}}