-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

実際には、1つの要素だけでなく、配列全体を使用しています。文字列から文字配列への変換を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 に答える