• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

regex Android

VPS Starter Arubacloud
0 głosów
249 wizyt
pytanie zadane 3 czerwca 2018 w Java przez marcinconn Obywatel (1,560 p.)
Potrzebuję sprawdzić kilka stringów jednym wzorcem(mogą zawierać jedną cyfrę spośród: 0,1,2,3,4,5). Mógłby mi ktoś powiedzieć jak mogę tego dokonać w Android Studio, pisząc w Javie?
komentarz 3 czerwca 2018 przez RafalS VIP (122,820 p.)
Sprecyzuj. Chcesz sprawdzać czy string zawiera tylko jedną z pośród tych czy wystarczy ze zawiera jedną z nich i może zawierać ich więcej?
komentarz 3 czerwca 2018 przez marcinconn Obywatel (1,560 p.)
Może zawierać tylko jedną cyfrę tylko z tego zbioru.

Sprawdzam, a jeżeli nie zawiera tylko jednego znaku(jednej z tych cyfr) to daje komunikat o niezgodności

2 odpowiedzi

+1 głos
odpowiedź 3 czerwca 2018 przez miro Pasjonat (23,870 p.)
wybrane 3 czerwca 2018 przez marcinconn
 
Najlepsza

Nie znalazłem wyrażenia które by sprawdzało tylko jedno wystąpienie. Jednak możesz zliczać ile było wystąpień. 

String input = "3fdsf";  
Pattern p = Pattern.compile("[0-5]");  
Matcher m = p.matcher(input);  

boolean isMatch(){
int count = 0; 
while (m.find()) {  
count++; 
}
if(count == 1) return true;  
}

 

komentarz 3 czerwca 2018 przez marcinconn Obywatel (1,560 p.)
ktoś mi wpisze 15 to co wtedy?
1
komentarz 3 czerwca 2018 przez miro Pasjonat (23,870 p.)

To wtedy dostajesz false. Chciałeś sprawdzić czy masz tylko jedną cyfrę? Chyba, że Ciebie źle zrozumiałem.

komentarz 3 czerwca 2018 przez marcinconn Obywatel (1,560 p.)
dobrze, ma puścić tylko i wyłącznie jak jest jedna cyfra z zakresu 0-5

a tak trochę wchodząc w inny temat, tu może leżeć problem, że jak wszystko w wyszukiwaniu wpiszę to wyświetla mi rekordy czy nie za bardzo?
komentarz 3 czerwca 2018 przez RafalS VIP (122,820 p.)

Nie żeby coś, ale to się da uprościć do jednej linijki :P:

Pattern.matches("[0-5]",testowanyString);

 

komentarz 3 czerwca 2018 przez miro Pasjonat (23,870 p.)

Mój zapis to jest Twój pierwszy uproszczony.  

Pattern.matches("[^0-5]*[0-5][^0-5]*","mfismd4sodfmd");

Nie wiedziałem jaki pattern dać więc zrobiłem na około. Dlatego dałem Tobie plusa. 

+1 głos
odpowiedź 3 czerwca 2018 przez RafalS VIP (122,820 p.)
Pattern.matches("[^0-5]*[0-5][^0-5]*","mfismd4sodfmd");

Zwraca true jeśli drugi argument pasuje do wzoru z pierwszego argumentu.

Może objaśnie znaki. [abe43] to jest opcja, oznacza, ze w tym miejscu może się pojawić a lub b lub e lub 4 lub 3. Można w opcji użyć zanegowania - może się pojawić wszystko poza: [^abe] - wszystko poza a, b i e. * oznacza, ze znak przed * może wystąpić 0 lub wiele razy. Dla ułatwienia w [] mozna też stosować od do [od-do].

Opisując ten wzór słownie: <każdy znak poza 0-5 dowolna ilosc razy (rowniez 0)><0-5><każdy znak poza 0-5 dowolna ilosc razy (rowniez 0)>

A co do regexów to gorąco polecam stronke: 
https://regex101.com/ 
Można sobie edytować wzór i sprawdzać na żywo jak działa na wpisanych stringach.

komentarz 3 czerwca 2018 przez marcinconn Obywatel (1,560 p.)
Na tej stronie nie widzę nic z regex pod Javę to raz. Dwa, dane wsadzam do kwerendy potem, więc musi być to tylko jeden znak(cyfra) z zakresu 0-5
komentarz 3 czerwca 2018 przez RafalS VIP (122,820 p.)

Regexy są w miare uniwersalne. Sam testuje regex101 z domyślnym php i wszystko działa mi w javie. Fakt czasem trzeba dodać dodać jakieś \, bo bez działa na regex101 a w kodzie nie, bo musisz podać wzorzec w formie stringa, a jak wiemy nie można użyć czystego znaku " w stringu, ale mi to załatwia Intellij jak przeklejam. Istnieją strony dedykowane pod jave, ale nie mają takich bajerów jak regex101: opis co oznacza każdy symbol we wzorze gdy na niego najedziesz, wyszukiwarka symboli itd.

A co do drugiej uwagi:

Może zawierać tylko jedną cyfrę tylko z tego zbioru.

"tak mi sie zdaje1" zawiera tylko jedna cyfre z przedzialu [0-5] :P. Regex na Twój problem to:

Pattern p = Pattern.compile("[0-5]");
Matcher m = p.matcher(testowanyString);
m.matches();
//lub samo
Pattern.matches("[0-5]",testowanyString);

Nie zrozumiałem o co Ci chodzi, bo gdyby porównać regexy do jakiegoś języka programowania to zapytałeś jak wypisać coś na ekran w tym języku (tak o najbardziej podstawową rzecz o jaką się da zapytać).

Podobne pytania

0 głosów
2 odpowiedzi 157 wizyt
pytanie zadane 27 stycznia 2019 w Java przez kingkushlee Gaduła (3,960 p.)
0 głosów
1 odpowiedź 91 wizyt
pytanie zadane 4 lutego 2023 w Java przez piotr_domanski Bywalec (2,040 p.)
0 głosów
1 odpowiedź 388 wizyt
pytanie zadane 11 października 2021 w Java przez Bomberos Nowicjusz (120 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...