2013-02-14 48 views
-2

我只是想知道如何將(char c:str.toCharArray())的轉換爲簡化循環。我試過Java:轉換爲基本循環

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); 
+0

「不過它似乎並沒有工作」是不是一個好/足夠的方式來描述你的問題。 – millimoose 2013-02-14 15:32:45

+0

爲什麼你'的char [] C = str.toCharArray();'在你的循環的每一步? – enguerran 2013-02-14 15:39:24

回答

4

嘗試String#charAt()方法:

for(int i = 0; i <= str.length(); i++) { 
    char c = str.charAt(i); 
    // ... 
} 
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); 
+1

'char c = str.charAt(i);' – 2013-02-14 15:31:57

0

相當於編譯器做什麼你這裏是

char[] chrs = str.toCharArray(); 
for(int i = 0; i < chrs.length; i++) { 
    char c = chrs[i]; 
    // ... 
} 
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); 
} 
} 

試試這個。