2012-01-03 83 views
0

例如,我有這個名單:在Java列表中的合併同類項的快捷方式

myList = ['2','3','a','b','c','3','5','£','a','4',5','='] 

我想,如果他們是彼此相鄰類似元素融合在一起。 所以我想用一個新的列表來結束,這樣的:

newList = ['23', 'abc', '35', '£', 'a', '45', '='] 
+6

你如何定義「相似」元素? – 2012-01-03 15:23:20

+0

快速注意:'僅適用於Java中的字符,不適用於字符串。至於這個問題,最簡單的解決方案就是檢查字符值,看看它是否與前一個相同的「類」(你定義的)。 – Viruzzo 2012-01-03 15:24:25

+0

如何將'2','3'變成'23'並將它們稱爲類似的分組? – adarshr 2012-01-03 15:24:49

回答

1

您需要定義測試相似,並使用該字符組合成一個字符串的方法。

public static void main(String... args) throws Exception { 
    List<Character> myList = Arrays.asList('2', '3', 'a', 'b', 'c', '3', '5', '£', 'a', '4', '5', '='); 
    List<String> grouped = new ArrayList<>(); 
    StringBuilder group = new StringBuilder(); 
    String prevType = null; 
    for (Character ch : myList) { 
     String type = typeOf(ch); 
     if (prevType != null && type != prevType) { 
      grouped.add(group.toString()); 
      group.setLength(0); 
     } 
     group.append(ch); 
     prevType = type; 
    } 
    grouped.add(group.toString()); 
    System.out.println("myList= " + myList); 
    System.out.println("newList= " + grouped); 
} 

private static String typeOf(Character ch) { 
    return Character.isDigit(ch) ? "digit" : 
      Character.isAlphabetic(ch) ? "alpha" : 
        "other"; 
} 

打印

myList= [2, 3, a, b, c, 3, 5, £, a, 4, 5, =] 
newList= [23, abc, 35, £, a, 45, =] 
+0

非常感謝 – jbchichoko 2012-01-03 15:51:16

0

我讀到列表中的每個字符和它轉換爲int,以獲得它的ASCII碼。

Nextly您可以定義代碼範圍相似的特徵 - 在這裏你可以讓私有方法類似isDigit(char c)isUpperLetter(char c)isSpecialCharacter(char c)isArabic(char c)等。

最後 - 由炭閱讀列表焦炭期間,你需要有一個標誌,通知您最後一個字符的類型 - 如果這個人是不一樣的 - 你開始concating新的字符串爲您newList

編輯:@refp只是寫了我正在說的內容;)

0

您只需遍歷循環中的項目,然後創建一個新的列表,將您的合併項目添加到其中。這似乎不是一個很好的問題tbh。