[Java] 2 strings matchen met wildcards

Pagina: 1
Acties:

  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 19-08 23:13
Ik wil 2 strings matchen met elkaar, de ene String bevat ofwel een hostname of een IP-adres; de andere bevat een hostname of IP-adres met wildcards (* en/of ?).
Ik zou het wel zelf kunnen maken, maar het zou me enigszins verbazen als er niet een makkelijke methode voor bestaat, ondanks dat ik er niet echt veel via google of de GoT search over kon vinden.
Mijn vraag is dus: bestaat er een makkelijke manier, en zo ja, kan je een hint geven (of liever, een oplossing :) )?!

  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Wat dacht je van regular expressions: http://java.sun.com/j2se/...egex/package-summary.html

  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 19-08 23:13
Ik ben op zich een redelijk RTFM kind of guy .. Maar dat zou inhouden dat ik eerst mijn string om zou moeten naar een regexp en vervolgens daarmee weer verder aan de slag moeten ..
Als ik ergens geen held in ben is het wel regexp.

  • momania
  • Registratie: Mei 2000
  • Nu online

momania

iPhone 30! Bam!

Dus als ik het goed begrijp heb je een string in de vorm van "bla.iets.com" of "192.168.0.1" etc..
Die wil je matchen tegen een string als "*.iets.com"" of bla.*.com" if "192.*.0.1" etc...

Wat je dan kan doen is de wildcard string tokenizen op de * en met alle tokens een indexOf doen op de te vergelijken string. Als die allemaal geen -1 terug geven en de indexen zitten op de juiste volgorde, heb je een match.

Neem je whisky mee, is het te weinig... *zucht*


  • ari3
  • Registratie: Augustus 2002
  • Niet online
Dash2in1 schreef op 27 February 2003 @ 20:39:
Ik ben op zich een redelijk RTFM kind of guy .. Maar dat zou inhouden dat ik eerst mijn string om zou moeten naar een regexp en vervolgens daarmee weer verder aan de slag moeten ..
Als ik ergens geen held in ben is het wel regexp.
Nee, je input string veranderd niet natuurlijk. Een regular expression is een definitie van een patroon. Dit patroon wordt toegepast op jouw input string. Het patroon is een match of juist niet.

Gerelateerde klassen (Sun JDK 1.4):

code:
1
2
java.util.regex.Pattern
java.util.regex.Matcher

"Kill one man, and you are a murderer. Kill millions of men, and you are a conqueror. Kill them all, and you are a god." -- Jean Rostand


  • ari3
  • Registratie: Augustus 2002
  • Niet online
<verwijderd>

[ Voor 200% gewijzigd door ari3 op 28-02-2003 08:43 ]

"Kill one man, and you are a murderer. Kill millions of men, and you are a conqueror. Kill them all, and you are a god." -- Jean Rostand


  • ari3
  • Registratie: Augustus 2002
  • Niet online
ari3 schreef op 28 februari 2003 @ 08:37:
Nu ik nog eens wat beter gelezen wat je wilt. Wil je werkelijk twee strings vergelijken, of bedoel je dat je wilt controleren of a.b.com een geldige host is in 1.2.3.* ?

In dat geval heeft het jsocks package precies wat je wilt. Zie onderstaande methods in socks.InetRange.

code:
1
2
boolean add(java.lang.String s)
          Adds another host or range to this range.


code:
1
2
boolean contains(java.lang.String host)
          Checks wether the given host is in the range.

"Kill one man, and you are a murderer. Kill millions of men, and you are a conqueror. Kill them all, and you are a god." -- Jean Rostand


  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 19-08 23:13
Voor de search: dat jsocks was precies wat ik zocht. :)
Pagina: 1