例如,我有這個名單:在Java列表中的合併同類項的快捷方式
myList = ['2','3','a','b','c','3','5','£','a','4',5','=']
我想,如果他們是彼此相鄰類似元素融合在一起。 所以我想用一個新的列表來結束,這樣的:
newList = ['23', 'abc', '35', '£', 'a', '45', '=']
例如,我有這個名單:在Java列表中的合併同類項的快捷方式
myList = ['2','3','a','b','c','3','5','£','a','4',5','=']
我想,如果他們是彼此相鄰類似元素融合在一起。 所以我想用一個新的列表來結束,這樣的:
newList = ['23', 'abc', '35', '£', 'a', '45', '=']
您需要定義測試相似,並使用該字符組合成一個字符串的方法。
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, =]
非常感謝 – jbchichoko 2012-01-03 15:51:16
我讀到列表中的每個字符和它轉換爲int,以獲得它的ASCII碼。
Nextly您可以定義代碼範圍相似的特徵 - 在這裏你可以讓私有方法類似isDigit(char c)
isUpperLetter(char c)
isSpecialCharacter(char c)
isArabic(char c)
等。
最後 - 由炭閱讀列表焦炭期間,你需要有一個標誌,通知您最後一個字符的類型 - 如果這個人是不一樣的 - 你開始concating新的字符串爲您newList
編輯:@refp只是寫了我正在說的內容;)
您只需遍歷循環中的項目,然後創建一個新的列表,將您的合併項目添加到其中。這似乎不是一個很好的問題tbh。
你如何定義「相似」元素? – 2012-01-03 15:23:20
快速注意:'僅適用於Java中的字符,不適用於字符串。至於這個問題,最簡單的解決方案就是檢查字符值,看看它是否與前一個相同的「類」(你定義的)。 – Viruzzo 2012-01-03 15:24:25
如何將'2','3'變成'23'並將它們稱爲類似的分組? – adarshr 2012-01-03 15:24:49