当前位置:编程学习 > JAVA >>

这道题应该如何来做?求前辈帮解答下。

希望能解答的完整一些,谢谢了。



1、对给定字符串,统计每个字母的出现字数(不区分大小写),请用文字写出逻辑及JAVA代码。
(输入参数:String,返回ArrayList(包含相关字符和次数的信息)) --------------------编程问答-------------------- --------------------编程问答-------------------- 以下是我之前帮人解决数字的处理办法,你改改就可以实现字符串了

int[] nums = {2,4,3,6,9,2,1,9,3,7,4,1,0,1,2,2,1,5,8,8,4,1,1,7,6,1,9,6,5,5,6,9,1,8,7,9,9,1,6,3,4,4,6,5,3,1,1,5,7,7,8,0,1,9,3,5,2,4,4,4,0,8,5,3,2,1,9,6,7,9,8,2,6,4,1,7,2,0,9,1,4,6,6,5,5,6,3,5,3,3,8,3,6,3,1,0,6,2,7,1,8,4,7,3,3,1,3,1,3,7,4,0,9,7,9,4,6,0,2,1,9,2,8,8,0,1,6,4,4,4,0,4,4,3,3,4,9,3,0,3,5,6,3,2,4,7,5,1,3,7,4,4,4,8,5,7,9,8,7,1,3,1,0,7,8,4,6,9,5,2,8,5,2,7,3,8,4,4,6,3,5,9,2,8,9,8,7,1,6,5,1,4,4,1,5,8,7,5,9,0,7,4,6,5,3,6,1,2,9,6,2,1,1,8,4,1,2,6,6,0,0,4,9,0,8,9,5,7,7,2,3,8,4,2,7,8,7,5,3,4,4,6,9,5,0,4,8,7,1,6,3,1,9,7,4,9,0,4,0,3,5,8,0,8,6,7,8,1,0,2,0,8,3,0,1,1,7,6,6,2,2,8,1,7,8,2,5,2,5,8,4,0,0,2,4,2,8,3,4,2,5,6,4,4,8,8,7,2,3,8,0,0,6,4,2,1,6,7,1,5,3,7,1,2,3,4,5,1,8,1,5,1,3,1,8,5,1,0,1,1,8,4,6,2,6,8,0,2,7,4,3,0,8,5,0,1,2,8,1,2,9,0,4,8,5,5,8,1,5,8,9,5,2,9,8,2,2,0,2,6,1,9,0,5,8,4,6,9,1,6,8,0,7,0,3,5,5,9,5,9,9,6,1,9,2,8,2,7,6,8,0,8,7,1,4,2,2,7,6,1,7,0,9,7,6,4,4,3,3,5,7,7,8,9,6,9,6,3,7,6,3,2,5,2,5,8,2,7,1,0,7,7,5,6,8,9,2,3,4,9,6,1,3,9,1,9,0,5,6,7,0,7,6,0,5,3,7,4,5,0,2,1,1,8,2,4,8,4,5,4,8,2,2,6,1,7,0,9,3,1,5,4,0,4,2,9,4,5,4,7,7,0,2,1,7,5,3,5,6,0,7,3,6,5,9,5,4,4,1,6,5,6,1,1,4,2,1,9,7,4,6,3,6,9,1,3,4,0,1,8,1,5,0,3,4,9,3,1,7,8,2,2,2,2,5,1,4,0,2,2,2,1,2,9,9,8,2,9,6,0,4,9,5,2,1,3,7,0,2,5,8,5,0,2,7,0,2,6,2,4,7,6,1,2,3,5,7,5,6,2,1,5,0,2,1,2,3,4,7,8,3,8,0,8,2,5,5,8,0,1,3,3,7,5,9,8,8,1,5,0,5,4,1,9,2,1,0,9,1,0,6,7,8,4,9,7,9,0,0,8,2,5,1,7,0,7,5,8,5,9,6,6,6,3,1,5,0,8,3,0,3,4,8,4,3,3,9,3,0,7,8,9,3,4,5,6,0,9,7,2,1,1,8,4,6,0,3,4,7,4,6,7,9,3,0,3,9,6,9,2,2,2,5,5,9,0,0,6,2,4,1,1,7,6,3,9,5,6,6,6,8,8,1,2,0,4,3,0,9,4,5,4,9,1,7,7,2,1,1,0,0,0,9,3,3,1,9,3,3,7,3,7,1,2,2,6,0,4,8,9,0,7,8,3,8,3,4,1,2,8,1,6,0,1,2,1,9,2,8,3,2,5,8,5,9,3,2,1,6,9,7,6,5,3,0,1,4,4,2,8,4,4,2,0,9,0,7,7,7,6,4,0,6,9,2,4,7,2,3,9,9,8,3,8,3,8,1,3,6,9,8,5,8,1,4,2,0,2,9,4,2,7,6,1,9,6,3,0,4,1,8,1,3,4,5,2,0,5,5,3,8,0,9,0,1,3,4,8,1,5,0,9,6,5,0,7,2,8,2,3,2,9,9,2,4,7,0,8,6,4,0,8,6,8,3,6,6,7,5,3,0,1,3,7,1,6,3,8,4,5,4,1,2,9,0,5,7,1,7,1,2,9,3,8,1,2,7,5,3,8,7,1,7,3,0,8,2,9,6,8,6,0,9,9,5,4,3,8,1,2,2,2,2,3,9,8,5,5,5,5,2,9,8,8,1,3,0,1,1,9,3,7,7,7,2,2,3,6,3,7};

        Map<Integer, Integer> treeMap = new TreeMap<Integer, Integer>();
        for(int i = 0; i < nums.length; i++) {
            int tempNum = nums[i];
            if(!treeMap.containsKey(tempNum)) {
//                如果第一次出现,则初始为1
                treeMap.put(tempNum, 1);
            }else {
//                如果在容器中已存在,则在原来的基础上+1
                int auto = treeMap.get(tempNum)+1;
                treeMap.put(tempNum, auto);
            }
        }
       int maxNum = 0;//最多的数字
        int degree = 0;//最多的次数
        Iterator<Integer> iter = treeMap.keySet().iterator();
        while(iter.hasNext())
        {
        Integer temp = iter.next();
        if(treeMap.get(temp)>degree) {
            maxNum=temp;
            degree = treeMap.get(temp);
            
        }

//        输出每个数字出现的次数
        System.out.println("数字"+temp+"' 出现"+treeMap.get(temp)+"次。");
        }
        System.out.println("出现最多的数字是:"+maxNum+",出现的次数是:"+degree+"次");
    }



这是结果:
数字0' 出现96次。
数字0' 出现96次。
数字1' 出现118次。
数字2' 出现112次。
数字3' 出现101次。
数字4' 出现100次。
数字5' 出现95次。
数字6' 出现90次。
数字7' 出现94次。
数字8' 出现102次。
数字9' 出现92次。
出现最多的数字是:1,出现的次数是:118次

想看其他更多的处理方法:http://topic.csdn.net/u/20110918/19/e3d487b7-3a2b-4937-b30a-6e9f442158be.html --------------------编程问答-------------------- toLowerCase() 
toUpperCase() 统一转换 
统计次数 可以用set集合 字母为键 次数为值 --------------------编程问答--------------------
引用 2 楼 huiwenjie168 的回复:
以下是我之前帮人解决数字的处理办法,你改改就可以实现字符串了
Java code

int[] nums = {2,4,3,6,9,2,1,9,3,7,4,1,0,1,2,2,1,5,8,8,4,1,1,7,6,1,9,6,5,5,6,9,1,8,7,9,9,1,6,3,4,4,6,5,3,1,1,5,7,7,8,0,1,9,3,5,2,4,4,4,0,8,5,3,2,1,9,6,7,9,8……



真不会改,大哥。 --------------------编程问答--------------------
引用 3 楼 tan0998 的回复:
toLowerCase() 
toUpperCase() 统一转换 
统计次数 可以用set集合 字母为键 次数为值


没思路,也不会,好心的大哥帮忙写一个吧。这个地方我就没接触过。 --------------------编程问答--------------------
引用 2 楼 huiwenjie168 的回复:
以下是我之前帮人解决数字的处理办法,你改改就可以实现字符串了

Java code

int[] nums = {2,4,3,6,9,2,1,9,3,7,4,1,0,1,2,2,1,5,8,8,4,1,1,7,6,1,9,6,5,5,6,9,1,8,7,9,9,1,6,3,4,4,6,5,3,1,1,5,7,7,8,0,1,9,3,5,2,4,4,4,0,8,5,3,2,1,9,6,7,9……

同意 --------------------编程问答--------------------

/**
 * @param args
 */
public static void main(String[] args) {
String str[] = {"a","b","c","d","e","a","b","c","d","e","a","b","c","d","e","a","b","c","d","e"};

Map<String,Integer> tree = new TreeMap<String,Integer>();//利用TreeMap来保存某个字符出现的次数
for(int i=0;i<str.length;i++)
{
String ch = str[i];
if(!tree.containsKey(ch)) //如果第一次出现,则初始为1
{
tree.put(ch, 1);
}
else
{
int auto = tree.get(ch)+1; //如果在容器中已存在,则在原来的基础上+1
tree.put(ch, auto);
}
}


//  使用Iterator,方便遍历输出
Iterator<String> iter = tree.keySet().iterator();
while(iter.hasNext())
{
// 获得字符对象信息
String temp = iter.next();

// 输出每个字符出现的次数
System.out.println("字母'"+temp+"' 出现"+tree.get(temp)+"次。");
}

}





字母'b' 出现4次。
字母'c' 出现4次。
字母'd' 出现4次。
字母'e' 出现4次。
--------------------编程问答-------------------- /**
 * @param args
 */
public static void main(String[] args) {
String str = "a,a,a,a,a,d,d,f,g,h,j,k,l,o,p,f,h,k";
Map<String,Integer> tree = new TreeMap<String,Integer>();//利用TreeMap来保存某个字符出现的次数
if(str.indexOf(",") > 0) {
String tmpStr[] = str.split(",");
for(int i=0;i<tmpStr.length;i++)
{
String ch = tmpStr[i];
if(!tree.containsKey(ch)) //如果第一次出现,则初始为1
{
tree.put(ch, 1);
}else{
int auto = tree.get(ch)+1; //如果在容器中已存在,则在原来的基础上+1
tree.put(ch, auto);
}
}
}else {
System.out.println("字母'"+str+"' 出现1次。");
}

//  使用Iterator,方便遍历输出
Iterator<String> iter = tree.keySet().iterator();
while(iter.hasNext())
{
// 获得字符对象信息
String temp = iter.next();

// 输出每个字符出现的次数
System.out.println("字母'"+temp+"' 出现"+tree.get(temp)+"次。");
}

}

字母'a' 出现5次。
字母'd' 出现2次。
字母'f' 出现2次。
字母'g' 出现1次。
字母'h' 出现2次。
字母'j' 出现1次。
字母'k' 出现2次。
字母'l' 出现1次。
字母'o' 出现1次。
字母'p' 出现1次。
--------------------编程问答-------------------- 不区分大小写的写法

/**
 * @param args
 */
public static void main(String[] args) {
String str = "a,a,A,a,A,d,d,f,g,h,j,k,l,o,p,f,h,k";
Map<String,Integer> tree = new TreeMap<String,Integer>();//利用TreeMap来保存某个字符出现的次数
if(str.indexOf(",") > 0) {
String tmpStr[] = str.split(",");
for(int i=0;i<tmpStr.length;i++)
{
//String ch = tmpStr[i].toUpperCase();//把字母统一转换成大写
String ch = tmpStr[i].toLowerCase();//把字母统一转换成小写
if(!tree.containsKey(ch)) //如果第一次出现,则初始为1
{
tree.put(ch, 1);
}else{
int auto = tree.get(ch)+1; //如果在容器中已存在,则在原来的基础上+1
tree.put(ch, auto);
}
}
}else {
System.out.println("字母'"+str+"' 出现1次。");
}

//  使用Iterator,方便遍历输出
Iterator<String> iter = tree.keySet().iterator();
while(iter.hasNext())
{
// 获得字符对象信息
String temp = iter.next();

// 输出每个字符出现的次数
System.out.println("字母'"+temp+"' 出现"+tree.get(temp)+"次。");
}

}

--------------------编程问答-------------------- 代码如下    只限参考
public static void main(String[] args) {
String str1 = "abcdabcdabcdefjHadftyryreeqaAAA";
String strPint = str1.toLowerCase();//将字符串转换成小写字母
char[] ch = strPint.toCharArray();

ArrayList<String> arryls = new ArrayList<String>();
TreeSet<String> set=new TreeSet<String>();
for(int i=0;i<ch.length;i++){
arryls.add(String.valueOf(ch[i]));
set.add(String.valueOf(ch[i]));
}

System.out.println(set);
Collections.sort(arryls);
System.out.println(arryls);

StringBuffer sb = new StringBuffer();
ArrayList<String> arryls2 = new ArrayList<String>();

for(int j=0;j<arryls.size();j++){
sb.append(arryls.get(j));
}
strPint = sb.toString();



   String[] newArray = set.toArray(new String[set.size()]);
for(int k=0;k<newArray.length;k++){
int flag=0;
for(int f=0;f<arryls.size();f++){
if(newArray[k].equals(arryls.get(f))){
flag++;
}
}
 System.out.println(newArray[k]+"==="+flag);
}
} --------------------编程问答-------------------- 其实我建议大家不要直接给楼主答案,一看题目就知道是大学教授布置给他的题目,拿到网上来问,这不是关键,关键是,他自己根本就没想过这个问题,何必呢,至始至终没见他提出一个自己的思路 --------------------编程问答-------------------- /**
 * 循环把字符记录在TreeMap的key里面,把字符串出现次数记录在TreeMap的value里面
 * 
 * @param _str
 *      字符串
 * @return Map<String, Integer>
 *    
 */
public static Map<String, Integer> strTreeMap(String _str){

Map<String,Integer> treeMap=new TreeMap<String,Integer>();

char array[]=_str.toCharArray();//把字符串转化为字符数组

int length=array.length;//字符的总长度

int i=0;

array: while (true) {

String valueof=String.valueOf(array[i]).toLowerCase();//把字符串全部转化为小写。

if(!treeMap.containsKey(valueof))//如果该字符不存在,则代表第一次出现,并记录第一次

treeMap.put(valueof, 1);
else //如果该字符存在,则在记录数的原基础上加一
treeMap.put(valueof, treeMap.get(valueof)+1);

i++;

if(i==length)break array;//当遍历到最后一个字符时候终止循环
}

return treeMap;
}

补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,