2010-02-01 89 views
4

我有这样的h此Java列表问题

public class no_of_letters_count { 
static int i; 
public static void main(String[] args) 
{ 

    String sMessage="hello how r u"; 
    String saMessage[] = sMessage.split(""); 
    List sList = Arrays.asList(saMessage);     
    Collections.sort(sList); 
    Iterator i=sList.iterator(); 
    while (i.hasNext()) 
    { 
    System.out.println((String)i.next()); 
    } 
} 
} 

//Now i want to count the number of occurance of each characters. 

喜欢

计数的程序= 2

数E = 1

+0

你可以重新格式化你的文章,让它看起来更好? – amarillion 2010-02-01 12:31:34

+7

当你看到你的问题的新答案时,通过点击问题左侧的向上指向箭头(...)来选出有帮助的答案。当你决定哪个答案对你最有帮助时,将其标记为已接受通过点击答案左边的复选框大纲来回答。这让其他人知道你已经收到了你的问题的一个很好的答案。这样做很有帮助,因为它向其他人表明您从社区中获得价值。 (如果你不这样做,人们会经常礼貌地要求你回去接受更多问题的答案!) – JuanZe 2010-02-01 12:39:21

+1

为了找到/阅读你之前提出的所有问题,点击你的昵称显示为链接的任何地方你登陆你的个人资料页面:http://stackoverflow.com/users/175023/gourav问题在那里列出(注:它们可能分散在几页)。 – BalusC 2010-02-01 13:31:04

回答

4

迭代超过sList并将每个char放入HashMap。如果不存在,则以计数1开始,否则增加计数。

编辑:不能帮助张贴一些代码。

首先,使用gnerics。

List<Character> sList = Arrays.asList(saMessage.toCharArray()); 

然后使用以下地图:

Map<Character, Integer> cmap = new HashMap<Character, Integer>(); 
+3

+1不发布代码。 – Adamski 2010-02-01 12:40:49

+1

我打算发布它,但我现在不会:) – ziya 2010-02-01 12:49:47

+2

他应该先接受一些答案。 – ant 2010-02-01 12:57:41

1

使用commons-collectionscommons-lang

List<Character> chars = Arrays.asList(
    ArrayUtils.toObject("asdfasdas".toCharArray())); 
Bag bag = new HashBag(chars); 

System.out.println(bag.getCount('a')); 
+3

你真的需要Appache-Commons来计算字母吗?它只是作业 – medopal 2010-02-01 13:06:34

+1

为什么不呢?您只需添加2个库并写入2行。如果这是我的作业,我会这样做。另一方面 - 是的,这不是要点 – Bozho 2010-02-01 13:20:25

+0

在大多数家庭作业中,它规定你必须自己实现核心算法,而不是像这样从库中导入它。这可能是好的(但矫枉过正)可以用它遍历字符串,但不能使用现成的bag/multiset实现。 – finnw 2010-02-01 14:42:26

0

下面是一些提示:

似乎你只是想获得的字符在String。使用String.toCharArray()

使用Map<Character,Integer>存储字符,它的出现:

foreach char c in sMessage.ToCharArray() 
if map.containsKey(c) 
    map.put(c, map.get(c) + 1); 
else 
    map.put(c, 1); 

下一个排序的地图和现在的结果。我离开你这里的一个片段到地图排序:如果您使用Unicode字符使用的字符作为数组的索引,而不是安全:

List<Entry<Character,Integer>> l = new ArrayList<Entry<Character,Integer>>(map.entrySet()); 

    Collections.sort(l, new Comparator<Entry<Character,Integer>>() { 
     public int compare(Entry<Character, Integer> o1, Entry<Character, Integer> o2) { 
      return o1.getKey().compareTo(o2.getKey()); 
     } 
    }); 
+0

为什么不使用SortedMap来避免开销额外的排序?此外,您可以通过调用get(c)并将结果赋值给Integer来避免调用containsKey(c),并将其与null进行比较。 – Adamski 2010-02-01 13:20:47

+0

它也是'String.toCharArray()'我们在这里没有使用C#... – pjp 2010-02-01 13:23:35

0

打印从AZ和AZ

人物的出现

注意数:),但我认为还是个好主意!

String str = "sometext anything"; 
int[] array=new int[256]; 

for (int x:array) array[x]=0; 

for (char c:str.toCharArray()){ 
    array[c]++; 
} 

for (int i=65;i<=90; i++){ 
    System.out.println("Number of "+(char)i+ "="+array[i] 
       + ", number of "+(char)(i+32)+"="+ array[i+32]); 
} 
+2

如果你对0发生的字符不感兴趣,那么为什么不使用一个映射关键字是字符...而不是一个大部分为零的数组。 – pjp 2010-02-01 13:28:15

+0

我知道,但它只是一个家庭作业,我想展示最简单的方法(我猜) – medopal 2010-02-01 13:51:55