JR 精品文章 - 找出并统计任意字符串中出现最多的字符
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » Java语言深入 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
找出并统计任意字符串中出现最多的字符
qingyuan914 转贴   更新:2008-05-20 11:42:44  版本: 1.0   

一个字符串中可能包含a~z中的多个字符,如有重复,求出现次数最多的那个字母及次数,如有多个重复则都求出来。

一个字符串中可能包含a~z中的多个字符,如有重复,求出现次数最多的那个字母及次数,如有多个重复则都求出来。
/**//*
 * Main.java
 *
 * Created on 2007-9-28, 22:39:31
 *
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package test;

import java.util.*;

/** *//**
 *
 * @author Jeffery
 */
public class Main ...{

    /** *//**
     * @param args the command line arguments
     */
    public static void main(String[] args) ...{
        String input = "aavzcadfdsfsdhshgWasdfasdfdddaaa";
        new Main().doString(input);
    }

    public void doString(String input) ...{
        char[] chars = input.toCharArray();
        ArrayList<String> lists = new ArrayList<String>();
        TreeSet<String> set = new TreeSet<String>();
        for (int i = 0; i < chars.length; i++) ...{
            lists.add(String.valueOf(chars[i]));
            set.add(String.valueOf(chars[i]));
        }
        System.out.println(set);
        Collections.sort(lists);
        System.out.println(lists);


        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < lists.size(); i++) ...{
            sb.append(lists.get(i));
        }

        input = sb.toString();
        System.out.println(input);
        int max = 0;
        String maxString = "";
        ArrayList<String> maxlist = new ArrayList<String>();

        Iterator<String> its = set.iterator();
        while (its.hasNext()) ...{
            String os = its.next();
            int begin = input.indexOf(os);
            int last = input.lastIndexOf(os);
            int value = last - begin + 1;

            if (value > max) ...{
                max = value;
                maxString = os;
                maxlist.add(os);
            } else if (value == max) ...{
                maxlist.add(os);
            }
        }
        int index = 0;
        for (int i = 0; i < maxlist.size(); i++) ...{
            if (maxlist.get(i).equals(maxString)) ...{
                index = i;
                break;
            }
        }

        System.out.print("The most occured character is ");
        for (int i = index; i < maxlist.size(); i++) ...{
            System.out.print(maxlist.get(i) + " ");
        }
        System.out.println();
        System.out.println("They occured " + max + " times");
    }
}
小结:
引入TreeSet:通过集合快速找到所有出现的字符,去除冗余;
引入ArrayList,使用快速排序,生成排序后的字符串;
如果频繁修改操作String,建议用StringBuffer类;
如果出现次数相同,则把相应的字符都记录到一个新的List里面;
使用泛型,可以大大降低出错的概率,减少类型转换可能带来的问题。
小结:
引入TreeSet:通过集合快速找到所有出现的字符,去除冗余;
引入ArrayList,使用快速排序,生成排序后的字符串;
如果频繁修改操作String,建议用StringBuffer类;
如果出现次数相同,则把相应的字符都记录到一个新的List里面;
使用泛型,可以大大降低出错的概率,减少类型转换可能带来的问题。

版权声明  
本篇文章对您是否有帮助?  投票:         投票结果:     8       1
作者其它文章: 作者全部文章
评论人:bluice 发表时间: Mon May 26 10:15:07 CST 2008
呵呵,你的方法太麻烦了。
评论人:wujiabao 发表时间: Tue May 27 14:38:04 CST 2008
这个题目至于这样做吗?准备一个26个长度的数组,遍历字符串,出现一个字符就把该字符对应的次数加1,最后取这个数组的最大值。

这个文章共有 2 条评论
主题: 一个简单线程池实现 上一篇文章
返回文章列表 返回〔Java语言深入〕
下一篇文章 主题: 从算法开始提高效率


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号