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


    主要掌握String中的方法

      char[] toCharArray()
              将此字符串转换为一个新的字符数组。

    int indexOf(String str)
              返回指定子字符串在此字符串中第一次出现处的索引。

    int lastIndexOf(String str)
              返回指定子字符串在此字符串中最右边出现处的索引

    集合List和set的区别

      List中可以出现重复的元素,Set中不能出现重复的元素

    集合遍历:

      List遍历

    1 Iterator<String> iterator = list.iterator();
    2         while(iterator.hasNext()){
    3             sb.append(iterator.next());
    4         }

      set遍历

    1 for(Iterator<String> it = set.iterator();it.hasNext();){
    2             String s = (String) it.next();
    3 }

    代码实现:

     1 import java.util.ArrayList;
     2 import java.util.Collections;
     3 import java.util.Iterator;
     4 import java.util.List;
     5 import java.util.Set;
     6 import java.util.TreeSet;
     7 /*
     8     一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",
     9     求出现次数最多的那个字母及次数,如有多个重复的则都求出。网上的解答有些是错的,少了47行那句话。
    10 */
    11 public class Demo3 {
    12     public static void main(String[] args) {
    13         String data="aavzcadfdsfsdhshgWasdfasdf";
    14         getMax(data);
    15     }
    16     private static void getMax(String data) {
    17         //将字符串使用toCharArray()方法变为字符数组,再遍历数组分别存入ArrayList和TreeSet
    18         List<String> list = new ArrayList<String>();
    19         Set<String> set = new TreeSet<String>();
    20         char[] array = data.toCharArray();
    21         for (int i = 0; i < array.length; i++) {
    22             list.add(String.valueOf(array[i]));
    23             set.add(String.valueOf(array[i]));
    24         }
    25         //利用集合工具类Collections的sort()方法对ArrayList排序
    26         Collections.sort(list);
    27         //使用StringBuffer存放list,并用toString()方法转换为字符串。
    28         StringBuffer sb = new StringBuffer();
    29         Iterator<String> iterator = list.iterator();
    30         while(iterator.hasNext()){
    31             sb.append(iterator.next());
    32         }
    33         String string = sb.toString();
    34         //至此将字符串变为了有序不允许重复的set和有序且字母有重复的String
    35         //迭代set,使用indexOf和lastIndexOf方法操作String得到重复字母次数
    36         //max记录最大重复次数,maxString记录当前最大字符串,maxList存储所有最大字符,maxList.size()即为重复字符个数
    37         int max=0;
    38         String maxString="";
    39         ArrayList<String> maxList = new ArrayList<String>();
    40         for(Iterator<String> it = set.iterator();it.hasNext();){
    41             String s = (String) it.next();
    42             int begin = string.indexOf(s);
    43             int end = string.lastIndexOf(s);
    44             int value = end-begin+1;
    45             if(value>max&&value>1){
    46                 maxList.clear();//产生新的最大字符要清空之前的最大字符,否则输出最大字符不正确。
    47                 max = value;
    48                 maxString = s;
    49                 maxList.add(s);
    50             }else if(value==max){
    51                 maxList.add(s);
    52             }
    53         }
    54         System.out.println(list);
    55         System.out.println(set);
    56         for (int i = 0; i < maxList.size(); i++) {
    57             System.out.println("最大字符"+maxList.get(i));
    58         }
    59         System.out.println("最多次数:"+max);
    60     }
    61 }

     第二种方法

     1 package me.gary.test;
     2 
     3 import java.util.Collections;
     4 import java.util.HashMap;
     5 import java.util.Map;
     6 import java.util.Set;
     7 
     8 public class StringTest {
     9     
    10     public static void main(String[] args) {
    11         String str = "aaadddcceefgfaratahfarfhg";
    12         System.out.println(getDuo(str));
    13     }
    14     
    15     
    16     public static String getMax(String str){
    17         
    18         char[] charArray = str.toCharArray();
    19         Map<Integer, String> m = new HashMap<Integer, String>();
    20         int num=0;
    21         String c = "";
    22         for(int i=0;i<charArray.length;i++){
    23             c = String.valueOf(charArray[i]);
    24             for(int j = 0;j<charArray.length;j++){
    25                 if(c.equals(String.valueOf(charArray[j]))){
    26                     num++;
    27                 }
    28             }
    29             m.put(num, c);
    30             num=0;
    31         }
    32         
    33         Set<Integer> keySet = m.keySet();
    34         Integer max = Collections.max(keySet);
    35         String s = m.get(max);
    36         
    37         
    38         
    39         return s+"="+max;
    40     }
    41 
    42 }

    结果:a=7


  • 相关阅读:
    C#操作REDIS例子
    A C# Framework for Interprocess Synchronization and Communication
    UTF8 GBK UTF8 GB2312 之间的区别和关系
    开源项目选型问题
    Mysql命令大全——入门经典
    RAM, SDRAM ,ROM, NAND FLASH, NOR FLASH 详解(引用)
    zabbix邮件报警通过脚本来发送邮件
    centos启动提示unexpected inconsistency RUN fsck MANUALLY
    rm 或者ls 报Argument list too long
    初遇Citymaker (六)
  • 原文地址:https://www.cnblogs.com/kingxiaozi/p/6030825.html
Copyright © 2020-2023  润新知