Быстрый способ объединения похожих элементов в списке в Java - PullRequest
0 голосов
/ 03 января 2012

Например, у меня есть этот список:

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

Я хочу объединить похожие элементы вместе, если они находятся рядом друг с другом.Поэтому я хочу получить новый список, например:

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

Ответы [ 3 ]

1 голос
/ 03 января 2012

Вам необходимо определить метод для проверки сходства и использовать его для объединения символов в строку.

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 голосов
/ 03 января 2012

Вы просто перебираете элементы в цикле и создаете новый список, в который вы добавляете объединенные элементы. Это не кажется большим вопросом.

0 голосов
/ 03 января 2012

Я бы прочитал каждый символ в списке и привел его к int, чтобы получить его код ascii.

Далее вы можете определить диапазон кода для похожих символов - здесь вы можете сделать приватные методы, такие как isDigit(char c) isUpperLetter(char c) isSpecialCharacter(char c) isArabic(char c) и т. Д.

Наконец - во время чтения списка char по char вам нужно иметь флаг, информирующий вас о типе последнего символа - если этот не тот же - вы начинаете составлять новую строку для вас newList

РЕДАКТИРОВАТЬ: @refp только что написал, о чем я говорил;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...