一个字符串中可能包含a~z中的多个字符,如有重复,求出现次数最多的那个字母及次数,如有多个重复则都求出来。
小结:
引入TreeSet:通过集合快速找到所有出现的字符,去除冗余;
引入ArrayList,使用快速排序,生成排序后的字符串;
如果频繁修改操作String,建议用StringBuffer类;
如果出现次数相同,则把相应的字符都记录到一个新的List里面;
使用泛型,可以大大降低出错的概率,减少类型转换可能带来的问题。
/*
* 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");
}
}
* 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里面;
使用泛型,可以大大降低出错的概率,减少类型转换可能带来的问题。