-2

我只是想知道如何将for(char c: str.toCharArray())转换为简化的循环。我试过了

for(int i = 0; i <= str.length(); i++)
    {
        char[] c = str.toCharArray();

但是,它似乎不起作用。它是一个计算字符串中字母出现的程序。顺便说一句,这不是家庭作业。我只是想练习回到事物的摇摆中。任何指导将不胜感激。完整的代码。

String str = "this is my new string";
HashMap<Character, Integer> map = new HashMap<Character, Integer>();

    for(int i = 0; i <= str.length(); i++)
    {
        char[] c = str.toCharArray();
        if(!map.containsKey(c))
            map.put(c,1);
        else
        {
            int value = map.get(c);
            map.put(c, ++value);
        }
    }
    System.out.println(map);
4

5 回答 5

4

试试String#charAt()方法:

for(int i = 0; i <= str.length(); i++) {
    char c = str.charAt(i);
    // ...
}
于 2013-02-14T15:32:05.553 回答
2

好吧,您实际上使用的是整个数组,而不仅仅是一个元素。您应该从 for 循环中取出从字符串到字符数组的转换,并在循环中使用 c[i]。


以前,您所做的是每次检查由 {'t', 'h', ...} 组成的数组是否包含在您的地图中,而不仅仅是检查每个字符。其他人建议的 charAt() 是在不使用额外变量的情况下做你想做的事的好方法。

String str = "this is my new string";
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
char[] c = str.toCharArray();

for(int i = 0; i <= str.length(); i++)
{
    if(!map.containsKey(c[i]))
        map.put(c[i],1);
    else
    {
        int value = map.get(c[i]);
        map.put(c[i], ++value);
    }
}
System.out.println(map);
于 2013-02-14T15:31:44.367 回答
1

您正在寻找charAt(i)而不是toCharArray().

于 2013-02-14T15:32:41.433 回答
0

相当于编译器在这里为你做的事情是

char[] chrs = str.toCharArray();
for(int i = 0; i < chrs.length; i++) {
   char c = chrs[i];
   // ...
}
于 2013-02-14T15:33:17.580 回答
0
if(!map.containsKey(c))

这里 c 是一个字符数组而不是一个字符。所以你遇到问题了。

public static void main(String[] args) {
String str = "aabbccdefgh";

Map<Character, Integer> map = new HashMap<Character, Integer>();

for (int i = 0; i < str.length(); i++) {
    Integer count = map.get(str.charAt(i));
    if (count == null)
        map.put(str.charAt(i), 1);
    else
        map.put(str.charAt(i), count + 1);
}
}

尝试这个。

于 2013-02-14T15:36:51.503 回答