Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Выбрать из строки все числа, кроме 0 и 1 / 25 сообщений из 55, страница 1 из 3
06.12.2018, 14:22
    #39743512
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
Всем привет!

Как настроить NUM_PARSER, чтобы выводились все числа, кроме 0 и 1?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
final String NUM_PARSER = "\\d+\\.*,*\\d*";
final String numString = " 1778.89 0 45 987,45 1 ";

Pattern patternNum = Pattern.compile(NUM_PARSER);
Matcher matcherNum = patternNum.matcher(numString);

while (matcherNum.find()) {
    System.out.println(matcherNum.group());
}


Выводит:
Код: java
1.
2.
3.
4.
5.
1778.89
0
45
987,45
1


Нужно:
Код: java
1.
2.
3.
1778.89
45
987,45
...
Рейтинг: 0 / 0
06.12.2018, 14:26
    #39743514
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
Molasar, я извиняюсь, что не помогу вас, но у меня есть универсальный ответ на все подобные вопросы - не использовать рег выражения.
...
Рейтинг: 0 / 0
06.12.2018, 19:59
    #39743828
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
Molasar,

А что делать с числами

001
1,00
1.00
01.00

?


Кстати, символ "," и "." - это только разделители целой и дробной части или какой-то (а то и оба) могут использоваться как разделители групп разрядов (100,000,000)?
...
Рейтинг: 0 / 0
06.12.2018, 21:21
    #39743878
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
ОзверинMolasar, я извиняюсь, что не помогу вас, но у меня есть универсальный ответ на все подобные вопросы - не использовать рег выражения.ну зачем так категорично?

https://regex101.com/r/uwH1WY/2

https://regex101.com/r/uwH1WY/2/codegen?language=java

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "(?(?=\\s[1|0]\\s)\\s[0|1]\\s|(\\d+[,|.]\\d+|\\d+))";
final String string = " 1778.89 0 45 987,45 1 5 6 1 ";

final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}
...
Рейтинг: 0 / 0
06.12.2018, 22:53
    #39743918
Пылинка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
вадя,

А так если
Код: java
1.
final String string = " 1778.89 0 1 45 987,45 1 5 6 1 ";


Но вот так будет работать
Код: java
1.
final String string = " 1778.89 0  1 45 987,45 1 5 6 1 ";
...
Рейтинг: 0 / 0
07.12.2018, 08:14
    #39743986
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
Пылинка,

https://regex101.com/r/uwH1WY/3

Код: java
1.
final String regex = "(?(?=\\s[10]\\s|[01]\\s)\\s[01]\\s|(\\d+[,.]\\d+|\\d+))";
...
Рейтинг: 0 / 0
07.12.2018, 08:37
    #39743993
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
вадяПылинка,

https://regex101.com/r/uwH1WY/3

Код: java
1.
final String regex = "(?(?=\\s[10]\\s|[01]\\s)\\s[01]\\s|(\\d+[,.]\\d+|\\d+))";



это же непонятная хрень!)) Как в этом разобраться?
никогда не понимал людей, которые используют в яве это.
Рег выражения можно юзать только там, где точно знаешь, что выражения - на года и меняться не будет. А так оно будет только расти и захватывать мозг человека. Не проще ли в цикле перебрать все и отсеять ненужное? Стримы уже придумали, можно
stream().filter().collect() использовать, если уже совсем не по нраву for()
...
Рейтинг: 0 / 0
07.12.2018, 08:50
    #39743997
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
Озверинэто же непонятная хрень!)) Как в этом разобраться?как ни странно - достаточно просто.
тем более что есть шикарный инструмент для пробы и обучения https://regex101.com
там расписаны все операторы с хорошими примерами.
ну и используется это не только в java, но и в других языках

ОзверинСтримы уже придумали, можноони такие медленные....
...
Рейтинг: 0 / 0
07.12.2018, 08:54
    #39743998
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
вадяОзверинэто же непонятная хрень!)) Как в этом разобраться?как ни странно - достаточно просто.
тем более что есть шикарный инструмент для пробы и обучения https://regex101.com
там расписаны все операторы с хорошими примерами.
ну и используется это не только в java, но и в других языках

ОзверинСтримы уже придумали, можноони такие медленные....

чтобы разобраться с кодом перейти в другой инструмент?
медленные стримы по сравнению с регекспом? Да я вас умоляю.
...
Рейтинг: 0 / 0
07.12.2018, 09:11
    #39744005
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
ваш пример выводит 0 и 1, нужно, чтобы не выводилвадяОзверинMolasar, я извиняюсь, что не помогу вас, но у меня есть универсальный ответ на все подобные вопросы - не использовать рег выражения.ну зачем так категорично?

https://regex101.com/r/uwH1WY/2

https://regex101.com/r/uwH1WY/2/codegen?language=java

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "(?(?=\\s[1|0]\\s)\\s[0|1]\\s|(\\d+[,|.]\\d+|\\d+))";
final String string = " 1778.89 0 45 987,45 1 5 6 1 ";

final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}
...
Рейтинг: 0 / 0
07.12.2018, 10:10
    #39744039
Пылинка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
Molasarваш пример выводит 0 и 1, нужно, чтобы не выводил
Ну так переделай сам.
...
Рейтинг: 0 / 0
07.12.2018, 12:02
    #39744143
Tsyklop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
Molasar, это делается циклом в разы быстрее чем регуляркой. Имею в виду не время работы приложения, а время потраченное на разработку.
...
Рейтинг: 0 / 0
07.12.2018, 12:17
    #39744166
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
TsyklopИмею в виду не время работы приложения, а время потраченное на разработку.по этому поводу есть анекдот про молодого и старого быков, которые стояли на горке и смотрели на стадо....
когда-то и ты быстро ползал, но тебя заставили ходить и ты счас можешь быстро ходить...
...
Рейтинг: 0 / 0
07.12.2018, 12:17
    #39744167
Пылинка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
Tsyklop,
Тут еще "студент" наверно и постановку переврал, тут не нужно matcherNum.group(), тут просто нужен replaceAll.
...
Рейтинг: 0 / 0
07.12.2018, 12:23
    #39744176
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
ПылинкаТут еще "студент" наверно и постановку переврал, тут не нужно matcherNum.group(), тут просто нужен replaceAll.ну как вариант... + split

а для практики

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
         String regex = "(?=\\s[10]\\s|[01]\\s|[01])\\s|(?<xxx>\\s\\d+[,.]\\d+|\\s\\d+)";
         String string = " 1778.89 0 45 987,45 1 5 6 1  0 1 0 32 1 ";

         Pattern pattern = Pattern.compile(regex);
         Matcher matcher = pattern.matcher(string);

        while (matcher.find()) {
            
                System.out.println("Group " + matcher.group("xxx"));
           
        }


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Group  1778.89
Group null
Group  45
Group  987,45
Group null
Group  5
Group  6
Group null
Group null
Group null
Group null
Group  32
Group null
только null выкинуть
...
Рейтинг: 0 / 0
07.12.2018, 12:44
    #39744202
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
вадятолько null выкинуть
и в чем крутость регэкспа, если все равно потом что-то выкидывать надо?
какая разница, выкидывать в коде null или "0" и "1"
...
Рейтинг: 0 / 0
07.12.2018, 12:55
    #39744216
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
TsyklopMolasar, это делается циклом в разы быстрее чем регуляркой. Имею в виду не время работы приложения, а время потраченное на разработку.

так и время отработки будет быстрей, как это не странно.

Что нить вроде:

Код: java
1.
List<String> result = Arrays.stream(dst.split(" ").filter(e->!(e.trim().length()==0 || e.equals("1") || e.equals("0"))).collect(Collectors.toList());



Решение хоть и в лоб, на пишется за полторы секунды, при изменении логики не надо лезть во вторичные инструменты и отрабатывает за меньшее время. Чего еще надо?
...
Рейтинг: 0 / 0
07.12.2018, 13:19
    #39744238
Пылинка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
Leonid Kudryavtsevвадятолько null выкинуть
и в чем крутость регэкспа, если все равно потом что-то выкидывать надо?
какая разница, выкидывать в коде null или "0" и "1"
Для отсечения есть replace в котором тоже есть регэксп
" 1778.89 0 45 987,45 1 ".replaceAll("\\s[1|0]\\s", " ");
Хотя формально остается вопросссс - что делать с " 1.0 001" и тд.
ps Лёня, как тебе ник -
?
...
Рейтинг: 0 / 0
07.12.2018, 13:22
    #39744242
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
Leonid Kudryavtsevи в чем крутость регэкспа, если все равно потом что-то выкидывать надо?
какая разница, выкидывать в коде null или "0" и "1"к сожалению я не суперспец в регулярных выражениях, может быть поэтому я не могу избавиться от null правильно, если кто подскажет - будет великолепно.
e.equals довольно медленная операция.... + stream также не быстро...
...
Рейтинг: 0 / 0
07.12.2018, 13:46
    #39744264
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
вадяLeonid Kudryavtsevи в чем крутость регэкспа, если все равно потом что-то выкидывать надо?
какая разница, выкидывать в коде null или "0" и "1"к сожалению я не суперспец в регулярных выражениях, может быть поэтому я не могу избавиться от null правильно, если кто подскажет - будет великолепно.
e.equals довольно медленная операция.... + stream также не быстро...

не думаю, что вы заметите разницу в этом случае по скорости работы, а вот поддерживать гораздо проще нечто, лаконично написанное и человеческим языком. regexp - нечеловеческий.
...
Рейтинг: 0 / 0
07.12.2018, 15:08
    #39744330
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
Озверинне думаю, что вы заметите разницу в этом случае по скорости работы, а вот поддерживать гораздо проще нечто, лаконично написанное и человеческим языком. regexp - нечеловеческий.
если ориентироваться на тех кто не сможет разобраться - нафиг тогда что- то делать.
а вот насчёт этой незаметной разницы уже наслышан...
но как придёшь куда-нибудь и из-за этой незаметной разницы сидишь и ждёшь, ждёшь....
...
Рейтинг: 0 / 0
07.12.2018, 15:11
    #39744333
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
не верю, что регэксп будет быстрее split + цикла с if
мне кажется - как раз наоборот, регэксп может оказаться старее
...
Рейтинг: 0 / 0
07.12.2018, 15:14
    #39744338
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
вадяОзверинне думаю, что вы заметите разницу в этом случае по скорости работы, а вот поддерживать гораздо проще нечто, лаконично написанное и человеческим языком. regexp - нечеловеческий.
если ориентироваться на тех кто не сможет разобраться - нафиг тогда что- то делать.
а вот насчёт этой незаметной разницы уже наслышан...
но как придёшь куда-нибудь и из-за этой незаметной разницы сидишь и ждёшь, ждёшь....

зачем гадать на кольцах ? Берешь, пишешь тесты - убеждаешься в том, что был неправ ))))
...
Рейтинг: 0 / 0
07.12.2018, 16:45
    #39744449
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
мне это нравится
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
        String j = " 1778.89 0 45 987,45 1 5 6 1 0 1 0 0 0 1 1 32 1 88.99 0 ";
        long s = System.nanoTime();
        String[] d = j.replaceAll("(?=\\s[10]\\s|[01]\\s|[01])\\s", "*").replaceAll("\\*[0|1]","").trim().split(" ");
        long ee = System.nanoTime();
        System.out.println(">" + (ee - s));
        for (String h : d) {
            System.out.println("--" + h);
        }



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
>4640716
--1778.89
--45
--987,45
--5
--6
--32
--88.99
...
Рейтинг: 0 / 0
07.12.2018, 16:46
    #39744452
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать из строки все числа, кроме 0 и 1
ОзверинЧто нить вроде:

Код: java
1.
List<String> result = Arrays.stream(dst.split(" ").filter(e->!(e.trim().length()==0 || e.equals("1") || e.equals("0"))).collect(Collectors.toList());


ты б делал не вроде а рабочий вариант, что б не гадать а сравнить
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Выбрать из строки все числа, кроме 0 и 1 / 25 сообщений из 55, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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