Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Фильтр строки 
:(
    Опции темы
jone31
  Дата 11.8.2009, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 343
Регистрация: 29.11.2008

Репутация: нет
Всего: нет



подскажите как посчитать сколько цифр в строке,  и цифры написанные словами(один, два, три...)  тоже


Это сообщение отредактировал(а) jone31 - 11.8.2009, 20:30
PM MAIL   Вверх
Joil
Дата 11.8.2009, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 24.1.2008

Репутация: нет
Всего: 8



jone31, первое что пришло в голову:
Код

public class Main {
    public static int quantity(String str, int digit) {
        String d = "";
        String s = "";
        switch (digit) {
            case 1: {
                s = "один";
                d = "1";
                break;
            }
            case 2: {
                s = "два";
                d = "2";
                break;
            }
            case 3: {
                s = "три";
                d = "3";
                break;
            }
            case 4: {
                s = "четыре";
                d = "4";
                break;
            }
            case 5: {
                s = "пять";
                d = "5";
                break;
            }
            case 6: {
                s = "шесть";
                d = "6";
                break;
            }
            case 7: {
                s = "семь";
                d = "7";
                break;
            }
            case 8: {
                s = "восемь";
                d = "8";
                break;
            }
            case 9: {
                s = "девять";
                d = "9";
                break;
            }
            case 0: {
                s = "нуль";
                d = "0";
                break;
            }
        }
        int q = str.concat(" ").split(d).length - 1;
        q += str.concat(" ").toLowerCase().split(s).length - 1;
        return q;
    }

    public static void main(String[] args) {
        String s = "12345vigr111jie1одинОдинывс1234дватри3";
        System.out.println(quantity(s, 3));
    }
}

Правда написано коряво... но вроде работеает, если надо все цифры найти, то в цикле smile 
--------------------
Who had deceived thee so often as thyself? © Benjamin Franklin--------------------Always bear in mind that your own resolution to succeed is more important than any other. © Abraham Lincoln--------------------If you need it - do it, if you want it - take it! © ...
PM MAIL ICQ   Вверх
jone31
  Дата 11.8.2009, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 343
Регистрация: 29.11.2008

Репутация: нет
Всего: нет



не, это немного не то. 
короче у меня щас вот так:
Код
msg = msg.replace("ноль","*");
msg = msg.replace("нуль","*");
msg = msg.replace("один","*");
msg = msg.replace("0дин","*");
msg = msg.replace("два","*");
msg = msg.replace("три","*");
msg = msg.replace("четыре","*");
msg = msg.replace("пять","*");
msg = msg.replace("шесть","*");
msg = msg.replace("семь","*");
msg = msg.replace("восемь","*");
msg = msg.replace("в0семь","*");
msg = msg.replace("девять","*");
msg = msg.replace("десять","*");

msg = msg.replace("0","*");
msg = msg.replace("1","*");
msg = msg.replace("2","*");
msg = msg.replace("3","*");
msg = msg.replace("4","*");
msg = msg.replace("5","*");
msg = msg.replace("6","*");
msg = msg.replace("7","*");
msg = msg.replace("8","*");
msg = msg.replace("9","*");


меня это устраивает, но нужно сделать что бы числа от 10 до 20 не заменялись. 

PM MAIL   Вверх
Joil
Дата 12.8.2009, 06:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 24.1.2008

Репутация: нет
Всего: 8



jone31, так тебе заменить надо или посчитать. Если посчитать, то тогда как я понимаю ты звездочки (*) считаешь? Если тебя это устраивает, ну и допиши перед этим всем замену чисел от 10 до 20 на решетку (#) допустим. В чем проблема?
--------------------
Who had deceived thee so often as thyself? © Benjamin Franklin--------------------Always bear in mind that your own resolution to succeed is more important than any other. © Abraham Lincoln--------------------If you need it - do it, if you want it - take it! © ...
PM MAIL ICQ   Вверх
jone31
  Дата 12.8.2009, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 343
Регистрация: 29.11.2008

Репутация: нет
Всего: нет



нет, ты не правильно понял. Корчое этот скрипт пишу для ICQ чата, цель его работы: что бы в чат не отправляли СПАМ, а именно юины других чатов. Мне нужна сделать что бы если в сообщении более 2 цифр, то заменять все на *, если нет то оставить как есть. Тот код что я выше выложил убирает абсолютно все цифры, и получается что если он напишет свой возраст(например: мне 30), то оно заменится на "мне **", вот в чем сложность! smile
PM MAIL   Вверх
Joil
Дата 12.8.2009, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 24.1.2008

Репутация: нет
Всего: 8



jone31, вот быстренько накатал опять, правда опять же не очень красиво и замена только цифр (не прописных):
Код

public class NewClass {
    public static String replace(String str, int digit) {
        for (int i = 0; i < str.length() - 1; i++) {
            String symbolPrevious = "";
            if (i != 0) {
                symbolPrevious = str.substring(i - 1, i);
            }
            String symbolCurrent = str.substring(i, i + 1);
            String symbolNext = str.substring(i + 1, i + 2);
            if (symbolCurrent.equals(String.valueOf(digit))) {
                if (!symbolNext.equals("0") && !symbolNext.equals("1") && !symbolNext.equals("2") &&
                    !symbolNext.equals("3") && !symbolNext.equals("4") && !symbolNext.equals("5") &&
                    !symbolNext.equals("6") && !symbolNext.equals("7") && !symbolNext.equals("8") &&
                    !symbolNext.equals("9") && !symbolPrevious.equals("0") && !symbolPrevious.equals("1") &&
                    !symbolPrevious.equals("2") && !symbolPrevious.equals("3") && !symbolPrevious.equals("4") &&
                    !symbolPrevious.equals("5") && !symbolPrevious.equals("6") && !symbolPrevious.equals("7") &&
                    !symbolPrevious.equals("8") && !symbolPrevious.equals("9")) {
                    str = str.substring(0, i) + "*" + str.substring(i + 1, str.length());
                }
            }
        }
        return str;
    }

    public static void main(String [] args) {
        String s = "beh12j1gre7gregh4rie7g77reg99gr42343ej32432n7kl6n8kl777777mjk77";
        for (int i = 0; i < 10; i++) {
            s = replace(s, i);
        }
        System.out.println(s);
    }
}

Вроде работает, осталось только заменить слова smile 

А, не, я тебя опять не правильно понял вроде бы.. (( Короче, если в сообщении более 2х цифр или когда подряд стоит более 2х цифр (вот непонятно).. приведи более подробные примеры и более подробные правила замены?

Это сообщение отредактировал(а) Joil - 12.8.2009, 16:45
--------------------
Who had deceived thee so often as thyself? © Benjamin Franklin--------------------Always bear in mind that your own resolution to succeed is more important than any other. © Abraham Lincoln--------------------If you need it - do it, if you want it - take it! © ...
PM MAIL ICQ   Вверх
jone31
  Дата 12.8.2009, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 343
Регистрация: 29.11.2008

Репутация: нет
Всего: нет



Цитата(Joil @  12.8.2009,  16:35 Найти цитируемый пост)
А, не, я тебя опять не правильно понял вроде бы.. (( Короче, если в сообщении более 2х цифр или когда подряд стоит более 2х цифр (вот непонятно).. приведи более подробные примеры и более подробные правила замены?

если вообще в сообщении более 2 цифр то закрывать звездами.

Например: 
msg = мне 40   <<< цифр < 2 = заменять не нужно
msg = текст 56.42.38.4 текст   <<< цифр > 2 = все цифры заменить на *.

вот что то типо такого фильтра сообщений нужна. smile

PM MAIL   Вверх
aleksandy
Дата 13.8.2009, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 260
Регистрация: 17.12.2006

Репутация: 4
Всего: 5



Я думаю надо смотреть в сторону regexp. 
Вот навскидку
Код

"4534 dsgdfg 34.45.67.3".replaceAll("\\d{3,}|[\\d{2}\\.]+", "*")

PM   Вверх
jone31
  Дата 13.8.2009, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 343
Регистрация: 29.11.2008

Репутация: нет
Всего: нет



Цитата(aleksandy @  13.8.2009,  11:34 Найти цитируемый пост)
Я думаю надо смотреть в сторону regexp. Вот навскидкукод Java1:"4534 dsgdfg 34.45.67.3".replaceAll("\\d{3,}|[\\d{2}\\.]+", "*")

у меня он вообще скрывает все цифры.

как посчитать сколько всего цифр в сообщении?
PM MAIL   Вверх
Joil
Дата 13.8.2009, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 24.1.2008

Репутация: нет
Всего: 8



Цитата(aleksandy @  13.8.2009,  11:34 Найти цитируемый пост)
Я думаю надо смотреть в сторону regexp. 

Тоже думал об этом, но что то ничего путного у меня не получилось smile 
Цитата(jone31 @  12.8.2009,  17:24 Найти цитируемый пост)
Например: 
msg = мне 40   <<< цифр < 2 = заменять не нужно
msg = текст 56.42.38.4 текст   <<< цифр > 2 = все цифры заменить на *.

вот что то типо такого фильтра сообщений нужна. smile

Ну если исходя их примеров, то наверное что то типа того:
Код

public class Main {
    public static int quantity(String str, int digit) {
        String d = "";
        switch (digit) {
            case 1: {
                d = "1";
                break;
            }
            case 2: {
                d = "2";
                break;
            }
            case 3: {
                d = "3";
                break;
            }
            case 4: {
                d = "4";
                break;
            }
            case 5: {
                d = "5";
                break;
            }
            case 6: {
                d = "6";
                break;
            }
            case 7: {
                d = "7";
                break;
            }
            case 8: {
                d = "8";
                break;
            }
            case 9: {
                d = "9";
                break;
            }
            case 0: {
                d = "0";
                break;
            }
        }
        int q = str.concat(" ").split(d).length - 1;
        return q;
    }

    public static String replace(String str) {
        int quantity = 0;
        for (int i = 0; i < 10; i++) {
            quantity += quantity(str, i);
        }
        if (quantity > 2) {
            str = str.replaceAll("1|2|3|4|5|6|7|8|9|0", "*");
        }
        return str;
    }

    public static void main(String[] args) {
        String msgOne = "мне 40";
        String msgTwo = "текст 56.42.38.4 текст";
        System.out.println(replace(msgOne));
        System.out.println(replace(msgTwo));
    }
}


Вот на выходе вроде все как надо:
Код

мне 40
текст **.**.**.* текст


Добавлено через 14 минут и 49 секунд
Если надо заменить не каждую цифру одной звездочкой, а каждую последовательность цифр одной звездочкой, то можно вот так написать:
Код

str = str.replaceAll("([0-9]){1,}", "*");

на выходе:
Код

текст *.*.*.* текст

--------------------
Who had deceived thee so often as thyself? © Benjamin Franklin--------------------Always bear in mind that your own resolution to succeed is more important than any other. © Abraham Lincoln--------------------If you need it - do it, if you want it - take it! © ...
PM MAIL ICQ   Вверх
dorogoyIV
Дата 13.8.2009, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



все не так  smile 
в аське можно написать такое: "привет! 100 лет тебя не слышал!" - уже три цифры подряд идут, еще так: "я 1928 года рождения" - уже четыре цифры...

PM MAIL   Вверх
jone31
  Дата 14.8.2009, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 343
Регистрация: 29.11.2008

Репутация: нет
Всего: нет



Цитата(dorogoyIV @  13.8.2009,  16:14 Найти цитируемый пост)
все не так   в аське можно написать такое: "привет! 100 лет тебя не слышал!" - уже три цифры подряд идут, еще так: "я 1928 года рождения" - уже четыре цифры...

можно и так. что ты можешь предложить(кроме того что уже предложено), что бы отфильтровывать юины из сообщений?
PM MAIL   Вверх
Joil
Дата 14.8.2009, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 24.1.2008

Репутация: нет
Всего: 8



jone31,  так UIN может быть 5(используются только администрацией вроде),6,7,8 и 9-значным? почему ты начал с 2х цифр? можно фильтровать по типу xxxxxx, xxx-xxx, xxx xxx, xxxxxxx, xxx-xxx-x, xxx xxx x и т. д. (ну это только предположение)! или я опять че то не понимаю?
--------------------
Who had deceived thee so often as thyself? © Benjamin Franklin--------------------Always bear in mind that your own resolution to succeed is more important than any other. © Abraham Lincoln--------------------If you need it - do it, if you want it - take it! © ...
PM MAIL ICQ   Вверх
dorogoyIV
Дата 15.8.2009, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



Цитата(jone31 @  12.8.2009,  14:32 Найти цитируемый пост)
Корчое этот скрипт пишу для ICQ чата, цель его работы: что бы в чат не отправляли СПАМ, а именно юины других чатов. 

если разобраться, не так уж много этих чатов...
можно их все в статическое поле забить...
т. е. тебе надо будет забить адреса, и делать проверку на них...

Добавлено через 7 минут и 35 секунд
ну и естественно для проги предусмотреть добавление других адресов чатов, что то вроде плагина
PM MAIL   Вверх
jone31
  Дата 1.9.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 343
Регистрация: 29.11.2008

Репутация: нет
Всего: нет



Цитата(dorogoyIV @  15.8.2009,  17:29 Найти цитируемый пост)
Цитата(jone31 @  12.8.2009,  14:32 )Корчое этот скрипт пишу для ICQ чата, цель его работы: что бы в чат не отправляли СПАМ, а именно юины других чатов. если разобраться, не так уж много этих чатов...можно их все в статическое поле забить...т. е. тебе надо будет забить адреса, и делать проверку на них...Добавлено через 7 минут и 35 секундну и естественно для проги предусмотреть добавление других адресов чатов, что то вроде плагина

этих чатов туева куча...


вообщем я остановилсо на regxp
Код
msg = msg.replaceAll("([0-9]){5,9}", "[UIN]");

код работает, и меня он устраивает. 
Но тут есть одна проблема: работает тока если цифры идут вподряд(1234...), а если нет(1 2 3 4 или 1.2.3.4 ...) то не срабатывает. помогите составить маску что бы и это включить


Это сообщение отредактировал(а) jone31 - 1.9.2009, 17:08
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0945 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.