利用 java.util.ArrayList 和 java.util.Hashtable,完成如下功能

ldshalh520 2008-01-08 09:06:02
利用 java.util.ArrayList 和 java.util.Hashtable,完成如下功能

统计并输出文件中的所有文字中每个英文字符出现的频率,并且重新按照字母序输出。
如:
文件内容:Language Specification
输出:a:3,c:2,e:2…
aaaccee
-------------------------------------------------------------------
-------------------------------------------------------------------

我已经做到这步了

package cn.com.shdb.jt;

import java.util.ArrayList;
import java.util.List;
import java.util.Hashtable;
import java.util.Enumeration;


public class Test

{

public static void main(String[] args)

{

List Test = new ArrayList ();
Hashtable Num = new Hashtable ();
String str = "Language Specification";



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

{

String bata = str.substring(i,i+1).toLowerCase();





if
(Num.containsKey(bata))

{

int out = ((Integer) Num.get(bata)).intValue()+1;

Num.put(bata ,out);

}

else

{
Num.put (bata,1);

}

}



for (Enumeration e = Num.keys(); e.hasMoreElements() ;)


{

Test.add( e.nextElement());

}

int k;
int j;
String temp = new String();

for(int i=0; i< Test.size();i++)

{

for ( j=i,k=i ; j< Test.size(); j++)

{
String A = (String)Test.get(j);
String B = (String)Test.get(k);
if (A.compareTo(B)< 0)

k=j;
}

temp=(String)Test.get(i);
Test.set(i, (String)Test.get(k));
Test.set(k,temp);
}
for (int i=0;i<Test.size() ;i++ )
{


System.out.print((String)Test.get(i) +":" + Num.get(Test.get(i)).toString ()+",");

}

System.out.println();

for (int i=1;i<Test.size() ;i++ )
{

}

}


}
...全文
261 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
weijiepeng 2008-01-09
  • 打赏
  • 举报
回复

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class chongfuchar {

public static void main(String[] args) {
String str = "fdsagasgaaaaafg";
Set<String> s = new HashSet<String>();
List<String> list = new LinkedList<String>();
String newstr = null;
Map<Integer,String> map = new HashMap<Integer,String>();
int count = 0;
int max = 0;
char[] cha = str.toCharArray();
for (int i = 0; i < cha.length; i++) {
s.add(String.valueOf(cha[i]));
list.add(String.valueOf(cha[i]));

}
Iterator<String> it = s.iterator();
while (it.hasNext()) {
newstr = it.next();
for (int i = 0; i < cha.length; i++) {
if (newstr.equals(list.get(i))) {
count++;
System.out.print(list.get(i));
System.out.print(newstr);
}
}
//System.out.print(newstr);
map.put(count,newstr);
count = 0;
}
System.out.println(map);
}

}
ldshalh520 2008-01-08
  • 打赏
  • 举报
回复

你能把全部程序给我吗?用我的 java.util.ArrayList 和 java.util.Hashtable

加上你的 if 语句 ,

还有就是我后面还没有实现 输出 aaaccee

谢谢了
  • 打赏
  • 举报
回复
5555~~,上面说错了,再改一下哈,10楼的不要去看了,脸红。。。。

String bata = str.substring(i,i+1).toLowerCase();
if(bata.charAt(0) <= ' ') {
break;
}
  • 打赏
  • 举报
回复
或者改成:

String bata = str.substring(i,i+1).toLowerCase();
if(bata.charAt(0) > ' ') {
break;
}
  • 打赏
  • 举报
回复
如果考虑效率问题的话,要遍历字符串中的所有字符,采用toCharArray()转为char数组会快很多。

String bata = str.substring(i,i+1).toLowerCase();
if(bata.charAt(0) > ' ') {
// 把后面的代码搬进去
}
ldshalh520 2008-01-08
  • 打赏
  • 举报
回复

麻烦你帮我看看,我的那个方法应该怎么办?在哪里加上判断?

没错的话 应该在 String bata = str.substring(i,i+1).toLowerCase(); 下面加
  • 打赏
  • 举报
回复
如果不需要空格的话,改一下这个方法,这样会忽略空格及其之前的控制字符,包括回车、换行什么的:

private static void add(char c, Map<Character, Integer> map) {
if(c <= ' ') {
return;
}
Integer tmp = map.get(c);
if(tmp == null) {
map.put(c, 1);
}else{
map.put(c, ++tmp);
}
}
changjiangzhibin 2008-01-08
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复

这个空格是字符串中的
Language Specification
这里面不就有一个空格吗?
ldshalh520 2008-01-08
  • 打赏
  • 举报
回复

先谢谢大家

“火龙果”

我要求程序输出:

a:3,c:2,e:2…
aaaccee

你的程序输出是这样:

:1, a:3, c:2, e:2, f:1, g:2, i:3, l:1, n:2, o:1, p:1, s:1, t:1, u:1
, aaa, cc, ee, f, gg, iii, l, nn, o, p, s, t, u

显示时最前面还是有空格
firefox_1983 2008-01-08
  • 打赏
  • 举报
回复
随便写了一些,还有许多可以调优的地方,不过基本满足楼主需要了
protected static String analyse(String s) {
try {
Map map = new HashMap();
String key = null;
StringBuffer sb = new StringBuffer("");
for (int i = 0; i < s.length(); i++) {
if (!map.containsKey(s.substring(i, i + 1))) {
map.put(s.substring(i, i + 1), 1);
} else {
map.put(s.substring(i, i + 1), Integer.parseInt(map.get(
s.substring(i, i + 1)).toString()) + 1);
}
}
List list = new ArrayList();
Iterator it = map.keySet().iterator();
while (it.hasNext()) {
key = it.next().toString();
list.add(key + ":" + map.get(key));
}
Collections.sort(list);
for (int i = 0; i < list.size(); i++) {
sb.append(list.get(i) + ",");
}
return sb.toString().substring(0,sb.toString().length()-1);
} catch (Exception e) {
System.err.print(e);
}
return "error";
}
  • 打赏
  • 举报
回复
用TreeMap重新写了一个,参考一下哈

import java.util.Map;
import java.util.TreeMap;

public class Test {

public static void main(String[] args) {
Map<Character, Integer> map = new TreeMap<Character, Integer>();
String str = "Language Specification";
char[] chars = str.toLowerCase().toCharArray();
for (int i = 0; i < chars.length; i++) {
add(chars[i], map);
}
printFrequency(map);
printAllChar(map);
}

private static void add(char c, Map<Character, Integer> map) {
Integer tmp = map.get(c);
if(tmp == null) {
map.put(c, 1);
}else{
map.put(c, ++tmp);
}
}

private static void printFrequency(Map<Character, Integer> map) {
int separator = 0;
for(Map.Entry<Character, Integer> entry : map.entrySet()) {
if(separator++ > 0) {
System.out.print(", ");
}
System.out.print(entry.getKey() + ":" + entry.getValue());
}
System.out.println();
}

private static void printAllChar(Map<Character, Integer> map) {
int separator = 0;
for(Map.Entry<Character, Integer> entry : map.entrySet()) {
if(separator++ > 0) {
System.out.print(", ");
}
char c = entry.getKey();
int k = entry.getValue();
for(int i = 0; i < k; i++) {
System.out.print(c);
}
}
}
}
  • 打赏
  • 举报
回复
你不是做好了吗?

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧