[JAVA] Regexprobleem

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • bReChThOu
  • Registratie: Januari 2007
  • Laatst online: 21-09 15:34

bReChThOu

Team Belgium

Topicstarter
Hai, ik zit dus met een regexprobleem in java. Even onderstaande code ter demonstratie:

if (!args[1].trim().matches("\\d")) {
System.out.println("[" + args[1].trim() + "] leverde geen match op.");
}

Dus als args[1] geen getal is moet hij in de if lus gaan anders niet.
Maar wat ik ook invul hij gaat er altijd in, met of zonder ! ervoor.

[testjeofzo] leverde geen match op.
[236] leverde geen match op.

Iemand een idee waaraan dit zou kunnen liggen?

Acties:
  • 0 Henk 'm!

  • tweakerbee
  • Registratie: Maart 2000
  • Laatst online: 23-09 18:50

tweakerbee

dus..?

"\\d+" gebruiken? Ander zal hij alleen bij 0-9 er
edit:
niet
in gaan. :)

Overigens kun je natuurlijk ook Integer.parseInt(args[0]) gebruiken, en de bijkomende NumberFormatException afvangen. Is netter dan een regex gebruiken als het om argumenten voor je programma gaat.

[ Voor 69% gewijzigd door tweakerbee op 13-02-2009 19:24 . Reden: Integer.parseInteger toegevoegd ]

You can't have everything. Where would you put it?


Acties:
  • 0 Henk 'm!

  • Sihaya
  • Registratie: Juni 2001
  • Niet online

Sihaya

Pasfoto:

Volgens mij moet de string in zijn geheel worden geaccepteerd door het opgegeven regex pattern. Als je dus bijvoorbeeld 123 wilt matchen dan moet je dus \d+ gebruiken, hiermee worden alle digits gematcht.

signature has expired


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Sihaya schreef op vrijdag 13 februari 2009 @ 19:21:
Volgens mij moet de string in zijn geheel worden geaccepteerd door het opgegeven regex pattern. Als je dus bijvoorbeeld 123 wilt matchen dan moet je dus \d+ gebruiken, hiermee worden alle digits gematcht.
Voor regexpen hoeft dat op zich niet, maar Java heeft dat inderdaad wel als extra randvoorwaarde voor de String.matches() en Matcher.matches(). Als je een deel-match wilt kan je de Matcher.find()-methode gebruiken, in dit geval zouden inderdaad alleen de getallen 0 t/m 9 matchen, maar 10 en hoger niet.