2015-09-23 30 views
4

如果給出了一個字符串ArrayList,即{"hello", "goodbye", "morning", "night"},我該如何檢查有多少個abc等等。列表?必須得到字符串ArrayList中的字母數

該方法必須返回的int s,其中位置[0]是a的,等等。例如,所述returnArray[1] = 1數字的陣列,因爲列表中的一個b。有沒有更好的方法來做到這一點,而不是簡單地對每個字母進行硬編碼?

public static int[] getLetters(ArrayList<String> list) { 
    int [] result = new int[25]; 
    if(list.contains('a')) { 
     result[0] = result[0] + 1; 
    } 
    return result; 
} 

有沒有比重複上述策略多25次更好的方法?

+0

你需要讓每一個字符,你然後可以使用該字符來索引數組 – MadProgrammer

+0

如果我理解您的問題是正確的,那麼「hello」和「goodbye」(等)就是單獨的單詞並不重要。連接列表中所有元素的字符串將導致相同的結果。真的嗎?大寫字母和非字母字符呢? – reto

+0

'new int [25]'會給你帶來各種各樣的悲傷,除非你是希臘人。但是,考慮到你使用'a/b/c'而不是'α/β/γ',那不太可能。 – paxdiablo

回答

0

喲可以將你的數組轉換爲CharArray(),然後你可以比較每個字母和你想要的字母。

+0

感謝您的回覆,但是您能否給我一點代碼來告訴我該如何工作?謝謝! –

8

可以使用char爲手段,以解決陣列,例如...

​​

導致...

[0, 1, 0, 1, 2, 0, 3, 2, 2, 0, 0, 2, 1, 3, 4, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0] 

注:這隻會工作對於小寫字符,如果你有任何大寫字符,你會得到一個數組越界的錯誤。你可以把範圍檢查的每個字符,以確保它的az之間,但是這取決於你

+0

僅僅使用26的榮譽。雖然如上所述,生產就緒的代碼應該像「WTF?」這樣的字符串是防彈的:-) – paxdiablo

+0

結果[c - 'a'] ++;' – Shadow

+0

@陰影這也應該工作;) – MadProgrammer

0

可以依靠mapCharacter類,如下所示:

import java.util.List; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.HashSet; 
import java.util.Set; 

class C { 
    public static void main(String[] args) { 
     String w1 = "samefoo"; 
     String w2 = "barsame"; 

     ArrayList<String> al = new ArrayList<String>(); 
     al.add(w1); 
     al.add(w2); 

     // this is your method ---> 
     HashMap<Character, Integer> map = new HashMap<Character, Integer>(); 
     for(String str: al) { 
      for(int i = 0; i < str.length(); ++i) { 
       char k = str.charAt(i); 
       if(map.containsKey(k)) { 
        map.put(k, map.get(k) + 1); 
       } else { 
        map.put(k, 1); 
       } 
      } 
     } 
     // <--- 

     for(char c: map.keySet()) { 
      System.out.println(c + ":" + map.get(c)); 
     } 
    } 
} 

顯然,所有那些不在地圖上的人隱含0作爲計數器。

0

與Java 8,你可以這樣來做:

List<String> list = new ArrayList<>(Arrays.asList("hello", "goodbye", "morning", "night")); 

Map<String, Long> map = list.stream() 
    .flatMap(word -> Arrays.stream(word.split(""))) 
    .collect(Collectors.groupingBy(
     letter -> letter, 
     Collectors.counting())); 

System.out.println(map); // {r=1, b=1, t=1, d=1, e=2, g=3, h=2, i=2, 
         // y=1, l=2, m=1, n=3, o=4} 

建立從這個圖所要求的陣列保持作爲一個鍛鍊; Tibial讀者;)

相關問題