powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Строки java. Упрощение программы.
16 сообщений из 41, страница 2 из 2
Строки java. Упрощение программы.
    #39379495
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid unique
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 try {
            for(char c = 0; c >= 0; c = (char) System.in.read()) {
                if (!Character.isISOControl(c) &&
                        c != KeyEvent.CHAR_UNDEFINED && Character.UnicodeBlock.of(c) != null &&
                        Character.UnicodeBlock.of(c) != Character.UnicodeBlock.SPECIALS
                        &&  'a' != c && 'o' != c && 'y' != c && 'e' != c && 'u' != c && 'i' != c && '.' != c
                        && 'A' != c && 'O' != c && 'Y' != c && 'E' != c && 'U' != c && 'I' != c) {
                    System.out.print('.');
                    System.out.print(Character.toLowerCase(c));
                }
            }
        } catch (IOException ignored) {
        }



Отлично. Только многобукв получилось. Я-бы сделал все-таки toLowerCase(). Кстати если по условию
мы работаем с Ansi то формула toLowerCase очень простая. Проверка условия и арифметика с кодами символов.
...
Рейтинг: 0 / 0
Строки java. Упрощение программы.
    #39379496
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton Теперь можно на вход подать строку больше чем 2 Гига-символов.
уточнение - внутри строки живет массив, они длинее чем Integer MAX_VALUE не бывают.
Можно подать несколько строк в сумме длинее 2 гигов.

Вообще этот лимит напрягает, множество библиотек (не только массивы в Java) используют адресацию 32 бит / 2, приходится либо в лонг снаружи заворачивать адрес либо 2 int инспользовать (сегмент и смещение в сегменте); буквально полгода назад наткнулся на такое ограничение в одном проекте (количество объектов больше 2 миллиардов а библиотека использовала инт для подсчета и адресации).
...
Рейтинг: 0 / 0
Строки java. Упрощение программы.
    #39379497
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
IOUtils.copy(new VowelFilter(System.in), System.out);
...
Рейтинг: 0 / 0
Строки java. Упрощение программы.
    #39379501
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman, VowelFilter - слишком генерализованный термин. И гугл слишком много находит.
Ты хоть подскажи откуда взял?
...
Рейтинг: 0 / 0
Строки java. Упрощение программы.
    #39379504
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

maytonТы хоть подскажи откуда взял?Интрига дня!

Ничего особенного, всего лишь самописный фильтр:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public static class VowelFilter extends java.io.BufferedInputStream {
    
    private static final String VOWELS = "aoyeui";
    
    public VowelFilter(java.io.InputStream is) {
        super(is);
    }

    @Override
    public synchronized int read(byte[] b, int off, int len) throws IOException {
        int nb = super.read(b, off, len);
        for (int i = 0; i < nb; i++) {
            if (isVowel(b[i])) {
                b[i] = '\0';
            }
        }
        return nb;
    }
    
    public boolean isVowel(byte ch) {
        return VOWELS.contains(String.valueOf((char)ch));
    }
}
...
Рейтинг: 0 / 0
Строки java. Упрощение программы.
    #39379505
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsmanНичего особенного, всего лишь самописный фильтр:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public static class VowelFilter extends java.io.BufferedInputStream { // почему не FilterInputStream?    
    private static final String VOWELS = "aoyeui"; //Где заглавные?    
    @Override //read() тоже нужно переопределять
    public synchronized int read(byte[] b, int off, int len) throws IOException  
    public boolean isVowel(byte ch) {
        return VOWELS.contains(String.valueOf((char)ch)); //indexOf(ch) чем не угодил?
    }
}
...
Рейтинг: 0 / 0
Строки java. Упрощение программы.
    #39379507
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДавай вернемся к заданию
Код: java
1.
2.
3.
4.
Задача:
-удаляет все гласные буквы,
-перед каждой согласной буквой ставит символ ".",
-все прописные согласные буквы заменяет на строчные.



...
(На самом деле я щас играю постановкой - но пускай будет так).

...
имхо, первая "игра с постановкой" возникла с того момента, как взялись удаления точек из входного потока. Это чистый домысел.
Про удаление точек, требование их одиночности или любое их преобразование ничего не сказано, сказано только, что точка "ставится" перед гласным символом.

Что можно читать и так - точка ставится, если ее не было в предыдущем символе и не ставится, если предыдущий символ точка, а сама по точка преобразованию не подлежит.
Тогда возникает память (о предыдущем символе) и состояние в алгоритме обработки.
Это тоже вариант домысла.
Или читать так - всегда перед согласной добавляется точка, независимо от ее предшествующего возможного присутствия
Так или иначе - в составе описания алгоритма никаких явных действий по очищению потока от символов, отличных от гласных нет.
Значит такой очистки не должно быть в этом разрабатываемом алгоритме.
Если входному потоку требуется дополнительная фильтрация, она должна быть:
а) произведена другим, отдельным алгоритмом
б) произойти это должно до начала применения разрабатываемого алгоритма. (Как сортировка происходит отдельно и до применения алгоритма двоичного поиска).
...
Рейтинг: 0 / 0
Строки java. Упрощение программы.
    #39379514
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman
Код: java
1.
//почему не FilterInputStream?

System.in определился как java.io.BufferedInputStream
Usman
Код: java
1.
//read() тоже нужно переопределять

По началу хотел его переопределить, но почему-то он не используется (в данном случае).
Usman
Код: java
1.
//Где заглавные?

Код: java
1.
//indexOf(ch) чем не угодил?

Это первоначальный вариант, с расчетом на то, что (возможно) пользователь uid unique
(и в т.ч. другие) совместными усилиями допилят его.
...
Рейтинг: 0 / 0
Строки java. Упрощение программы.
    #39379517
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я как себе понимаю смысл. Даже не из задачи а из модульного теста.
Код: java
1.
2.
3.
4.
входные данные
aBAcAba
выходные данные
.b.c.b


На вход приходит фонема. Голосовое сообщение. Или машинно-обработанный звук.
Алгоритм работает по аналогу soundex, или metaphone, позволяя идентифицировать
фразу по набору согласных букв. Поэтому

"mayton" => ".m.t.n"

И последняя гласная или точка (если-бы она существовала) удаляется т.к. не играет роли.
Я-бы еще удалил и первую точку.
...
Рейтинг: 0 / 0
Строки java. Упрощение программы.
    #39379541
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsmanЭто первоначальный вариант, с расчетом на то, что (возможно) пользователь uid unique
(и в т.ч. другие) совместными усилиями допилят его.
Масса вариантов возможна если подтянуть библиотеки апаче коммонс, гуаву, от гугла.
Если символы ASCII строго и используется только Java API то ничего не мешает работать как в С и смещением делаеть toLowerCase().

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
        try {
            for(int c = 0; c >= 0; c = System.in.read()) {
                if (c >= 32 && c <= 126 //printable acsii
                        && 65 != c && 79 != c && 89 != c && 69 != c && 85 != c && 73 != c
                        && 97 != c && 111 != c && 121 != c && 101 != c && 117 != c && 105 != c) {
                    System.out.print('.');
                    System.out.print(c < 91 && c > 64 ? (char) (c + 32) : (char) c);
                }
            }
        } catch (IOException ignored) {
        }
...
Рейтинг: 0 / 0
Строки java. Упрощение программы.
    #39379544
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid uniqueUsmanЭто первоначальный вариант, с расчетом на то, что (возможно) пользователь uid unique
(и в т.ч. другие) совместными усилиями допилят его.
Масса вариантов возможна если подтянуть библиотеки апаче коммонс, гуаву, от гугла.
Если символы ASCII строго и используется только Java API то ничего не мешает работать как в С и смещением делаеть toLowerCase().

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
        try {
            for(int c = 0; c >= 0; c = System.in.read()) {
                if (c >= 32 && c <= 126 //printable acsii
                        && 65 != c && 79 != c && 89 != c && 69 != c && 85 != c && 73 != c
                        && 97 != c && 111 != c && 121 != c && 101 != c && 117 != c && 105 != c) {
                    System.out.print('.');
                    System.out.print(c < 91 && c > 64 ? (char) (c + 32) : (char) c);
                }
            }
        } catch (IOException ignored) {
        }



Пардон, так обычно декомпилированный код выглядит (обфускированый еще хуже). Надо 'u', 'a'.. поставить вместо кодов.
Еще можно свитч использовать

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
try {
            for(int c = 0; c >= 0; c = System.in.read()) {
                if (c >= 32 && c <= 126) //printable acsii
                switch(c) {
                    case 65:
                    case 97:
                    // add more cases
                    case 111: continue;
                    default: {
                        System.out.print('.');
                        System.out.print(c < 91 && c > 64 ? (char) (c + 32) : (char) c);
                    }
                }
            }
        } catch (IOException ignored) {
        }



Можно конечно дальше крутить если не надоело
...
Рейтинг: 0 / 0
Строки java. Упрощение программы.
    #39379549
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid unique,

Спасибо
...
Рейтинг: 0 / 0
Строки java. Упрощение программы.
    #39379551
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usmanuid unique,

Спасибо

И вам спасибо. Надо иногда что нибудь вытаскивать из простого но не очевидного и сделать отбор решений заодно и мнениями обменяться

1) По красоте кода с точки зрения ООП, расширяемости и модификации. Использовать кроме Java API широко распространенные библиотеки.
2) Скорости работы (нагруженный код, красота не важна, нужна скорость). Кракозябры в С стиле.
3) Минимизации расхода памяти (большие объемы данных - скажем так, по сто мегов / гигабайту данных в чанке (массиве).
Недавно напоролся на высокий расход памяти при обработке больших byte[] вложений (50 100 мегов) в веб сервисе (старая версия apache axis), оказалось там в процессе парсинга создавалось до 12 копий строки (стринг буфферы, toChars() в общем копирования постоянные буферов по цепочке). Память съедалась моментально (1 гиг памяти требовался на обработку одного запроса!)
...
Рейтинг: 0 / 0
Строки java. Упрощение программы.
    #39379558
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid uniqueНадо иногда что нибудь вытаскивать из простого но не очевидного и сделать отбор решений заодно и мнениями обменятьсяпремного плюсую
...
Рейтинг: 0 / 0
Строки java. Упрощение программы.
    #39379581
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Почему я настаивал на том что это FSM. Потому что считал что
последовательность гласных заменяется на точку. Например

"maori" => "m.r"
...
Рейтинг: 0 / 0
Строки java. Упрощение программы.
    #39389171
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДа. Почему я настаивал на том что это FSM. Потому что считал что
последовательность гласных заменяется на точку. Например

"maori" => "m.r"
Имело бы смысл подумать о FSM если бы была вложенность с разными правилами парсинга:

"(maori){aaaa}(meeet)" => "m.r|AAA|m.t"
...
Рейтинг: 0 / 0
16 сообщений из 41, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Строки java. Упрощение программы.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]