powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Выбрать из строки все числа, кроме 0 и 1
25 сообщений из 55, страница 2 из 3
Выбрать из строки все числа, кроме 0 и 1
    #39744466
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

Код: 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.
31.
32.
33.
34.
35.
package test_jvm;

public class Test12 {

	public static void main(String[] args) {
		int pass;
//		for ( pass=0; pass<5; pass++ ) {
//			System.out.println( "pass="+pass );
	
        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(" ");
        for (String h : d) {
            System.out.println("--" + h);
        }
        long ee = System.nanoTime();
        System.out.println(">" + (ee - s));
        System.out.println("");
        
        s = System.nanoTime();
        d = j.split(" ");
        for (String h : d) {
            if (h.length()==0 || h.contentEquals("0") || h.contentEquals("1") ) {
            	;
            } else {
            	System.out.println("--" + h);
            }
        }
        ee = System.nanoTime();
        System.out.println(">" + (ee - s));
        System.out.println("");
        //		}
	}

}



--1778.89
--45
--987,45
--5
--6
--32
--88.99
>1929314

--1778.89
--45
--987,45
--5
--6
--32
--88.99
>122591


"мне это нравится" ==> 1 929 314
split + if ==> 122 591
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744490
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

только результаты разные - у меня массив готов к использованию, у тебя только вывод после "фильтра"
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744494
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяОзверинЧто нить вроде:

Код: 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
Выбрать из строки все числа, кроме 0 и 1
    #39744511
Фотография Пылинка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадямне это нравится
Код: 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);
        }



Ну ладно я - я раз в 5 лет это использую (пришлось в доку лезть, хотя зарекся изучать то что не использую), ну ты-то, вижу, любишь это дело, нужно проще и прямее -
Код: java
1.
j.replaceAll("\\s[10](?=\\s)", "");
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744513
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяLeonid Kudryavtsev,
только результаты разные - у меня массив готов к использованию, у тебя только вывод после "фильтра"

Результат соответсвует ИЗ

выводились все числа, кроме 0 и 1?


Можно и в массив сложить, все равно быстрее будет. Только влом. Не интересно
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744528
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПылинкаНу ладно я - я раз в 5 лет это использую (пришлось в доку лезть, хотя зарекся изучать то что не использую), ну ты-то, вижу, любишь это дело, нужно проще и прямее -
Код: java
1.
j.replaceAll("\\s[10](?=\\s)", "");

спасибо
Код: java
1.
j.replaceAll("\\s[10](?=\\s)", "").trim().split(" ");


я это для изучения занялся...

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
        String j = " 1778.89 0 45 987,45 1 5 6 1 0 1 0 0 0 1 1 32 1 88.99 0 ";
        for (int i = 0; i < 10; i++) {
            long s = System.nanoTime();
            String[] d = j.replaceAll("\\s[10](?=\\s)", "").trim().split(" ");
            long ee = System.nanoTime();
            System.out.println(">" + (ee - s));
        }

        System.out.println();
        for (int i = 0; i < 10; i++) {
            long s = System.nanoTime();
            List<String> result = Arrays.stream(j.split(" ")).filter(e -> !(e.trim().length() == 0 || e.equals("1") || e.equals("0"))).collect(Collectors.toList());
            long ee = System.nanoTime();
            System.out.println("->" + (ee - s));
        }


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
>2731305
>83729
>70256
>64802
>60632
>60632
>71539
>64160
>57424
>70576

->2077191
->79238
->39458
->27589
->24702
->26306
->31438
->29513
->25344
->27268
признаю....
stream тут быстрее
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744530
Фотография Пылинка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяпризнаю....
stream тут быстрее
Такие штуки не для скорости используют, а для удобства и гибкости.
Например верификация поля в Spring ( дата действия кредитки)
Код: java
1.
2.
3.
@Pattern(regexp="^(0[1-9]|1[0-2])([\\/])([1-9][0-9])$",
           message="Must be formatted MM/YY")
  private String ccExpiration;


Будете тут специальный код писать? Никуда не денешься, будешь изучать.
аналогично и всякие обработчики данных в XML, генераторы текстов-данных через XSLT - скорость там упадет, на больших объемах затошнит.

PS если в конце строки будет 0 или 1 без концевого пробела, то
Код: java
1.
j.replaceAll("(?<=\\s)([10]\\s|[10]$)", ""); 
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744531
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пылинка, в яве есть человеческие валидаторы, чтобы не пользоваться этим чудовищем. Сам валидатор так и выглядит "MM/YY"
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744533
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПылинкаБудете тут специальный код писать? Никуда не денешься, будешь изучать.кто ж с этим спорит.

ПылинкаТакие штуки не для скорости используют, а для удобства и гибкости.ну в конкретном примере ТС - можно и сравнить.
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744540
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадятолько результаты разные - у меня массив готов к использованию
если без вывода, все еще печальнее

1 743 323 vs 19 230

почти 2 порядка разница

p.s. Как-то на стримах у Вас все печально. Они конечно медленные, но не настолько же.


Код: sql
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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
public class Test12 {

	public static void main(String[] args) {
		int pass;
//		for ( pass=0; pass<5; pass++ ) {
//			System.out.println( "pass="+pass );
	
        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);
        }
        ee = System.nanoTime();
        System.out.println(">" + (ee - s));
        System.out.println("");
        
        s = System.nanoTime();
        d = j.split(" ");
        for (String h : d) {
            if (h.length()==0 || h.contentEquals("0") || h.contentEquals("1") ) {
            	;
            } else {
            	System.out.println("--" + h);
            }
        }
        ee = System.nanoTime();
        System.out.println(">" + (ee - s));
        System.out.println("");
//
        // ---
        s = System.nanoTime();
        d = j.split(" ");
        boolean flags[] = new boolean[d.length];
        int k = 0;
        for ( int i = 0; i<d.length; i++ )
        {
            String h = d[i];
            if (h.length()==0 || h.contentEquals("0") || h.contentEquals("1") ) {
            	flags[i] = false; 
            } else {
            	flags[i] = true;
            	k++;
            }
        }
        String d2[] = new String[ k ];
        k = 0;
        for ( int i = 0; i<d.length; i++ )
        {
        	if ( flags[i] ) {
        		d2[ k ] = d[ i ];
        		k++;
        	}
        }
        d = d2;
        // ---
        ee = System.nanoTime();
        System.out.println(">" + (ee - s));
        for (String h : d) {
            System.out.println("--" + h);
        }
        
        //		}
	}

}



[src]
>1743323
--1778.89
--45
--987,45
--5
--6
--32
--88.99
>1992111

--1778.89
--45
--987,45
--5
--6
--32
--88.99
>163756

>19230
--1778.89
--45
--987,45
--5
--6
--32
--88.99
[src]
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744546
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот они, не правильные тесты, без прогонов )))

у меня на пятом прогоне

18 629 - split + if руками
34 554 - stream
150 835 - regexp
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744548
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

да, стоит пожертвовать "читабельностью"
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744550
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самый быстрый код - самый простой. Чем стримы читабельнее - я х.з.
Код: java
1.
2.
3.
4.
5.
6.
        ArrayList<String> arr = new ArrayList<String>();
        for ( String h : d ) {
        	if ( !( h.length() == 0 || h.equals("1") || h.equals("0") ) ) {
        		arr.add( h );
        	}
        }
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744552
Фотография Пылинка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev 18 629 - split + if руками
34 554 - stream
150 835 - regexp
Лёня, это в дюймах или в сантиметрах?
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744554
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevСамый быстрый код - самый простой. Чем стримы читабельнее - я х.з.
Код: java
1.
2.
3.
4.
5.
6.
        ArrayList<String> arr = new ArrayList<String>();
        for ( String h : d ) {
        	if ( !( h.length() == 0 || h.equals("1") || h.equals("0") ) ) {
        		arr.add( h );
        	}
        }

ну хорошо , что сделал, а то я уж испугался, что вдруг без листа...
ПылинкаЛёня, это в дюймах или в сантиметрах?в чём-то его компа...
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744556
Фотография Пылинка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevСамый быстрый код - самый простой. Чем стримы читабельнее - я х.з.

Да ведь даже официально где-то видел признание от авторов стримов, что "они "пока что медленнее", я думал что все это знают.
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744558
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevЧем стримы читабельнее - я х.з.возможно вкусовщина, но мне стримы тоже кажутся читабельней - лучше видно что хотели сделать

Код: java
1.
2.
3.
List<String> result = Arrays.stream(j.split("\\s+"))
                                       .filter(i -> !blacklist.contains(i))
                                       .collect()


если подобный код не выполняется 10000 раз в цикле, то пофиг, что медленней.
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744560
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaесли подобный код не выполняется 10000 раз в цикле, то пофиг, что медленней.тут фишка в том, что таких "кусочков" кода может набраться довольно много и в результате тормозная система...
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744565
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяи в результате тормозная система...
тормозить она будет скорее всего не из-за этого. кроме того можно тоже самое сказать про любое высокоуровневое решение на яве или даже про всю яву скопом - зачем ee юзать если производительность во главе угла
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744568
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaтормозить она будет скорее всего не из-за этого. кроме того можно тоже самое сказать про любое высокоуровневое решение на яве или даже про всю яву скопом - зачем ee юзать если производительность во главе углавыбор java или не ява не обсуждается.
но вот если есть выбор 2+ вариантов кода - то выбор более быстрого предпочтителен.
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744569
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяно вот если есть выбор 2+ вариантов кода - то выбор более быстрого предпочтителен
почему? один из основных критериев, который привел нас к яве, все еще тот же - пусть будет не самое самое быстрое, но зато легко писать, легко читать и легко модифицировать. Кто-то может сходу сказать, что делает эта вполне реальная регулярка?
Код: java
1.
private static final Pattern p = Pattern.compile("^(?=.*[A-Z].*)(?=.*[!@#\\-\\$\\&\\*\\?\\^\\)\\(\\+\\=\\.\\_\\<\\>])(?=.*[0-9].*)(?=.*[a-z].*).*$");


такой себе write-only код. что-то типа черного ящика, руками не трогать, ничего не менять ;)
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744575
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,
позвольте не согласиться, пишется один раз, а поминают не добрым словом постоянно.
читать можно всё, если по умному написано, даже очень сложное. и модифицировать тоже. это не проблема.
проблема в этой регулярке только то, что редко пользуются, и поэтому всё в памяти не держится....
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744586
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяпозвольте не согласиться
эт сколько угодно ;)

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

вадячитать можно всё
можно, только на понимание прочитанного будет уходить разное время. Плюс еще можно понять неправильно. Мой любимый пример из повседневной практики копания в навозе
Код: java
1.
2.
if (Bool.isTrue(user.isAccountExpired()) == false) {
}


каждый раз, как натыкаюсь, зависаю на секунду, пытаясь осмыслить

вадяпроблема в этой регулярке только то, что редко пользуются, и поэтому всё в памяти не держитсяона слишком за пределами тривиального, хотя бы в силу размера. даже если знаешь каждый из элементов, ее придется разобрать на части, чтобы осознать, что там делается. по-этому в случае если 100% уверен, что выражение правильное и никогда не будет изменено - можно юзать. Если же нет, неплохо бы написать и попонятней. имхо.
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744723
Фотография Пылинка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaКто-то может сходу сказать, что делает эта вполне реальная регулярка?
Код: java
1.
private static final Pattern p = Pattern.compile("^(?=.*[A-Z].*)(?=.*[!@#\\-\\$\\&\\*\\?\\^\\)\\(\\+\\=\\.\\_\\<\\>])(?=.*[0-9].*)(?=.*[a-z].*).*$");


такой себе write-only код. что-то типа черного ящика, руками не трогать, ничего не менять ;)
Вы затронули как раз один из больных вопросов. Некоторые выдающиеся разработчики считают что "код - лучшая документация", в чем я с ними коренным образом не соглашался.
В данном случае разработчик обязан описать что данный фрагмент должен делать. Тем более что это не точный алгоритм, а всего лишь шаблон и с неограниченным вхождением любых символов.
...
Рейтинг: 0 / 0
Выбрать из строки все числа, кроме 0 и 1
    #39744728
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПылинкаНекоторые выдающиеся разработчики считают что "код - лучшая документация", в чем я с ними коренным образом не соглашался
Я я согласен. Если намерение можно выразить кодом, то лучше так и сделать. В данном случае я намеренно подправил пример. В оригинале он выглядит как
private static final Pattern SECURE_PASSWORD_PATTERN = ...
так уже гораздо понятней, о чем речь, не так ли?
...
Рейтинг: 0 / 0
25 сообщений из 55, страница 2 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Выбрать из строки все числа, кроме 0 и 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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