主要掌握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