Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Итератор строки


Автор: ldegyl 1.4.2016, 18:15
Доброго времени суток. Требуется наставить на путь истинный или pathiterator). Имеется рандом строка вида : "[string1].string2.some.[.].[new].[].lastthing.main.[string[substring].[substring2]].[this.is.a.one.substring].[gergregertgerggrgre.gt.[ff]].somemoretext.[[this].is.[also].[one.[substring]]].";  Требуется пробежаться по символам и вывести строку без "[]", без  ".", точки должны остаться только в словах находящихся в "[...]". Заранее благодарен за помощь)

Автор: LSD 4.4.2016, 11:54
Код

    private static String filter(String input) {
        if (input == null || input.isEmpty()) {
            return input;
        }
        StringBuilder out = new StringBuilder(input.length());
        int openedBraces = 0;
        for (int i = 0; i < input.length(); i++) {
            char c = input.charAt(i);
            switch (c) {
                case '[':
                    openedBraces++;
                    break;

                case ']':
                    if (openedBraces > 0) {
                        openedBraces--;
                    } else {
                        throw new IllegalArgumentException("Unexpected closing brace at " + i);
                    }
                    break;

                case '.':
                    if (openedBraces > 0) {
                        out.append(c);
                    }
                    break;

                default:
                    out.append(c);
                    break;
            }
        }
        return out.toString();
    }

Автор: ldegyl 5.4.2016, 18:45
Спасибо огромное. Сразу видно человек разбирается в вопросе) А то на разных сайтах мне такого понаписывали черт ногу сломит. Я правда несколько доработал код,так как в условиях еще было, что слова разделяются точками и для каждого слова "." концом прежнего и началом нового.
Код

 private static String filter(String input) {
        if (input == null || input.isEmpty()) {
            return input;
        }
        StringBuilder out = new StringBuilder(input.length());
        int openedBraces = 0;
        for (int i = 0; i < input.length(); i++) {
            char c = input.charAt(i);
            switch (c) {
                case '[':
                    openedBraces++;
                    break;
                case ']':
                    if (openedBraces > 0) {
                        openedBraces--;
                    } else {
                        throw new IllegalArgumentException("Unexpected closing brace at " + i);
                    }
                    break;
                case '.':
                    if (openedBraces > 0) {
                        out.append(c);
                    }
                    else {
                        out.append(" ");
                    }
                    break;
                default:
                    out.append(c);
                    break;
            }
        }
        return out.toString();
    }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)