java字符串按照字母顺序输出,悬赏100分,在线等

给定一个随机字符串,要求编写代码将字符串按照字母顺序重新输出(大写字母在小写字母前),并统计出现最多的字符及出现的次数。(必须使用任意一种你所熟悉的设计模式) 例如: String str = “gjhgjhlHello”; 输出 eHllo , l=3 某公司面试题,在线等,悬赏100分,先谢谢各位!!!

单例模式

public class SingleConvert
{
private static SingleConvert singleConvert;
private String result;
private String original;

private SingleConvert ()
{}

private void convertString ()
{
char c = result.charAt (0);
if (Character.isUpperCase (c))
{
System.out.println (result);
return;
}
else
{
result = result.substring (1);
convertString ();
}
}

private void sortString ()
{
char[] cs = result.toCharArray ();
for ( int i = 0; i < cs.length; i++ )
{
for ( int j = i + 1; j < cs.length; j++ )
{
char first = Character.toUpperCase (cs[i]);
char second = Character.toUpperCase (cs[j]);
if (first > second)
{
char temp = cs[i];
cs[i] = cs[j];
cs[j] = temp;
}
}
}
result = String.valueOf (cs);
System.out.println (result);
}

private void findMax ()
{
if (result.isEmpty ())
{
return;
}
String temp = " " + original + " ";
char max = 0;
int num = -1;
for ( int i = 0; i < result.length (); i++ )
{
char current = result.charAt (i);
int len = temp.split (current + "").length - 1;
if (len > num)
{
max = current;
num = len;
}
}
System.out.println (result + ", " + max + " = " + num);
}

private void randomString ( int n )
{
String result = "";
char c = 'a';
for ( int i = 0; i < n; i++ )
{
int random = (int) ( Math.random () * 25 );
double type = Math.random ();
if (type > 0.6)
{
result += (char) ( c + random - 32 );
}
else
{
result += (char) ( c + random );
}
}
System.out.println (result);
this.original = result;
this.result = result;
}

public static SingleConvert getInstance ()
{
if (null == singleConvert)
{
singleConvert = new SingleConvert ();
}
return singleConvert;
}

public static void main ( String[] args )
{
SingleConvert singleConvert = SingleConvert.getInstance ();
singleConvert.randomString (13);
singleConvert.convertString ();
singleConvert.sortString ();
singleConvert.findMax ();
}
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-05-10

额,楼上敲的比我快。。。

public class Test {
public static void main(String[] args) throws IOException {

System.out.println("请输入一个字符串:");//提示输入

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));// 定义键盘输入
String str = bufr.readLine(); // 定义String接收输入的随机字符串
int count = 0; // 定义计数器
Random random = new Random(); // 创建随机对象

TreeMap<String, Integer> tm = new TreeMap<String, Integer>();
// 创建Map集合,用来存放字符与出现次数的映射关系

for (int i = 0; i < str.length(); i++) {

String string = String.valueOf(str.charAt(i));
Integer value = tm.get(string);
if (value != null) // 以字符作为键判断集合中此键是否存在对应的值
count = value; // 如果存在,就用计数器获取这个键的值
count++; // 计数器加1
tm.put(string, count); // 将新的映射存入集合
count = 0; // 计数器归零

}
System.out.println("原集合是:字母  = 出现次数");
System.out.println(tm); // 输出集合

Integer max = 0; // 定义计数器,获取key出现的次数
String key = null; // 定义变量,记录出现次数最多的字符

//将tm集合的映射关系返回到Set集合以便取出操作
Set<Map.Entry<String, Integer>> entrySet = tm.entrySet();

for (Map.Entry<String, Integer> me : entrySet)
//遍历集合,寻找出现次数最多的字字符
if (me.getValue() > max) {
max = me.getValue();
key = me.getKey();
} else if (me.getValue() > max) {
if (me.getKey().compareTo(key) > 0)
key = me.getKey();
}

System.out.println("出现次数最多的字符是:" + key + ",它出现了" + max + "次");

}
}




算法步骤是:1、让用户输入一个随机的字符串

2、把这个字符串的每个字符作为key,出现的次数作为value,存入map集合中。

那么,存放之前,就要判断这个字符是否已经存在集合中了,如果不存在,就直接将字符作为key,value为1存入;

如果已经存在,就取出原来的value加1以后存入

3、讲map的键值关系返回到一个set。

4、遍历set,找出value最大,也就是出现次数最多的字符,如果有两个字符出现次数一样,就取较大的字符

5、输出结果


求个采纳哦。。。

第2个回答  2014-05-10
package ui;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class Test {

/**
* @param a
*/
public static void main(String[] args) {
String str = "gjhgjhlHello";
char[] a = str.toCharArray();

for (int i = 0; i < a.length - 1; i++) {
int min = i;
for (int j = i + 1; j < a.length; j++) {
if (a[min] > a[j]) {
min = j;
}
}
if (min != i) {
char temp = a[i];
a[i] = a[min];
a[min] = temp;
}
}
Map map=new HashMap();
for (int i = 0; i < a.length; i++) {
char ch=a[i];
if(map.containsKey(ch)){
int count= (Integer) map.get(ch);
map.put(ch,count+1);
}
if(!map.containsKey(ch)){
map.put(ch, 1);
}
}
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]);
}

Set set =map.keySet();
Iterator it=set.iterator();
char maxCh = ' ';
int maxValue=0;
while(it.hasNext()){
char s= (Character) it.next();

int value= (Integer) map.get(s);
if(value>maxValue){
maxValue=value;
maxCh=s;
}
}
System.out.println();
System.out.println(maxCh+"="+maxValue);

}

}

输出:
Hegghhjjlllo
l=3
相似回答