Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 03.03.2019
Сообщений: 9

StringBuilder парсинг строки

29.03.2019, 15:54. Показов 2694. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть строка "fgh129.0.0.1 hg127.0.0.1%". Подскажите, как правильно распарсить с помощью StringBuilder, чтобы выделить из нее IP-адреса. При том они должны быть связаны именно тремя точками. Если же меньше, то не считается за адрес.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.03.2019, 15:54
Ответы с готовыми решениями:

Используя строки типа StringBuilder
Сформировать строку длины N (N — четное), которая состоит из чередующихся символов C1 и C2, начиная с C1 используя строки типа...

Удаление (последнего) символа из строки StringBuilder
Возникла проблема во время реализации программы. Условие такое: на вход подаётся строка из файла (в примере упростил до последовательности...

Парсинг JSON-строки и вывод данных из строки
Добрый день! Я разрабатываю Android-клиент, который мог бы обмениваться данными с размещенной WCf-службой. Для чтения данных из службы...

7
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
29.03.2019, 16:10
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Task034 {
    public static void main(String[] args) {
        String str = "fgh129.0.0.1";
        String[] numbers = str.trim().replaceAll("[^\\d\\.]", "").split("\\.");
        StringBuilder sb = new StringBuilder();
        if (numbers.length == 4) {
            for (String number : numbers) {
                if (number.matches("\\d+")) {
                    sb.append(number).append("\n");
                } else {
                    throw new IllegalArgumentException("Incorrect ip address");
                }
            }
        } else {
            throw new IllegalArgumentException("Not ip address");
        }
 
        System.out.println(sb.toString());
    }
}
Добавлено через 46 секунд
вывод:

129
0
0
1
1
0 / 0 / 0
Регистрация: 03.03.2019
Сообщений: 9
29.03.2019, 16:56  [ТС]
Спасибо вам большое. А как сделать, чтобы можно было задавать в начальной строке не только один IP?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
29.03.2019, 16:58
Java
1
2
3
4
5
6
7
String s = "fgh129.0.0.1 hg127.0.0.1%192.123.23jkhj";
        Pattern p = Pattern.compile("\\d+\\.\\d+\\.\\d+\\.\\d+");
        Matcher m = p.matcher(s);
 
        while (m.find()){
            System.out.println(m.group());
        }
Bash
1
2
129.0.0.1
127.0.0.1
1
0 / 0 / 0
Регистрация: 03.03.2019
Сообщений: 9
29.03.2019, 17:00  [ТС]
Спасибо вам огромнейшее
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
29.03.2019, 17:08
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class Task034 {
    public static void main(String[] args) {
        String s = "fgh129.0.0.1 hg127.0.0.1%192.123.23jkhj";
        Pattern p = Pattern.compile("\\d+\\.\\d+\\.\\d+\\.\\d+");
        Matcher m = p.matcher(s);
        StringBuilder sb = new StringBuilder();
        while (m.find()) {
            if (isCorrectIP(m.group())) {
                sb.append(m.group()).append("\n");
            }
        }
        System.out.println(sb.toString());
    }
 
    private static boolean isCorrectIP(String ip) {
        boolean result = true;
        String[] args = ip.split("\\.");
        for (String arg : args) {
            int number = Integer.parseInt(arg);
            if (number < 0 || number > 255) {
                result = false;
                break;
            }
        }
        return args.length == 4 && result;
    }
}
Добавлено через 1 минуту
код у iSmokeJC, отличный, но добавил проверку цифр от 0 до 255
1
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
29.03.2019, 17:16

Не по теме:

Цитата Сообщение от ArtemFM Посмотреть сообщение
код у iSmokeJC, отличный
Честно говоря, код - гуано. Накидал на скорую руку, регулярку можно куда как грамотней написать.

Впрочем, спасибо на добром слове!


0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
29.03.2019, 17:45
iSmokeJC, при страхе быть забаненым каких слов не скажешь только )))
Шучу само собой ))) Я просто редко Pattern Matcher использую... мне понравился

Добавлено через 20 минут
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class Task034 {
    public static void main(String[] args) {
        String s = "fgh129.0.0.1abc127.0.0.1abc280.123.23.3abcd900.34.34abc255.255.255.0";
        Pattern p = Pattern.compile("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}");
        Matcher m = p.matcher(s);
        StringBuilder sb = new StringBuilder();
        while (m.find()) {
            if (isCorrectIP(m.group())) {
                sb.append(m.group()).append("\n");
            }
        }
        System.out.println(sb.toString());
    }
 
    private static boolean isCorrectIP(String ip) {
        return ip.matches("(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{2}|[0-9])\\." +
                "(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{2}|[0-9])\\." +
                "(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{2}|[0-9])\\." +
                "(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{2}|[0-9])");
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.03.2019, 17:45
Помогаю со студенческими работами здесь

Парсинг строки
Доброе время суток! столкнулся с такой проблемой что странно отрекаются данные из строки bool LoadTypeFiles() { ...

Парсинг строки
Добрый день. Помогите с решением следующей задачи. На вход идет строка из 0 и 1, например, 110100011, нужно распарсить её на составляющие....

Парсинг строки
Добрый день. Мне нужно распарсить строку со следующей граматикой Для простого тибличного процессора. То есть имеется массив стрингов,...

Парсинг строки
У меня есть строка следующего типа: ...

Парсинг строки
Нужно разобрать строку на &quot;запчасти&quot;, в какой написан какой-то пример, типа string a = &quot;1 + 2 + 3 + 4 + 5 * 2 / 7 + 3 * 5&quot;;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru