SPiNMedlem sedan mars 20007 896 inlägg Jag sitter och pillar med regular expressions, men är väldigt osäker på hur jag ska göra. Jag vill plocka ut data ur en sträng, in i separata strängar.
Strängen med rådata kan se ut som följer:
NAME SPiN TYPE Javare\nCALLER PersonNamn.PersonID\n\n
Det jag nu vill plocka ut ur strängen är SPiN och PersonNamn.PersonID, så jag tänkte mig något sånt här:
String string = "NAME SPiN TYPE Javare\nCALLER PersonNamn.PersonID\n\n";
Pattern pattern = Pattern.compile ( "NAME [A-Za-z_-\\.].* TYPE .*?", Pattern.MULTILINE );
Matcher matcher = pattern.matcher ( string );
if ( !matcher.matches () ) {
// Inga träffar
return;
}
String theName = . // Hur plockar jag ut SPiN hit?
Sen är det ju bara att upprepa proceduren när jag vill plocka ut PersonNamn.PersonID.
Vilken metod i Matcher ska användas för att plocka ut data? Ser mönstret bra ut, eller finns det något snyggare?
MvH,
nicclasMedlem sedan feb. 20001 050 inlägg Vilken metod i Matcher ska användas för att plocka ut data? Matcher.getMatch() går bra att använda. För att få ut resultaten måste du kapsla in de delar du är intresserade av med ()-tecken.
Ser mönstret bra ut, eller finns det något snyggare? Det ser väl bra ut, men det fungerar inte ;) Du måste tex. escape:a - tecknet till \\- annars tror den att du angett en "range". Dessutom måste du ange DOTALL för att få . att matcha ett radbrytningstecken.
/nicclas - https://www.frisim.com
SPiNMedlem sedan mars 20007 896 inlägg Glömde visst att escape:a ser jag nu, tackar tackar. :)
Men metoden getMatch () hittar jag inte för klassen Matcher. http://java.sun.com/j2se/1.4/docs/api/java/util/regex/Matcher.html
:q
nicclasMedlem sedan feb. 20001 050 inlägg Sorry, jag kör fortfarande med Java 1.3 och OROMatcher (som jag trodde var den som Sun "tog med" i Java 1.4). I OROMatcher finns matcher.getMatch() :)
nicclasMedlem sedan feb. 20001 050 inlägg Det verkar som om du kan använda group() direkt i Java 1.4 util.regex-paketet efter det du gjort
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
anropen.
LimeMedlem sedan sep. 2001961 inlägg Varför?
Om det är någon typ av kommunikationssprotokoll du skall göra, varför då hålla kvar vid "kommaseparerat"? Använd dig av XML istället så får du massor gratis.
/Lime
SPiNMedlem sedan mars 20007 896 inlägg Jäpp, jag vet. XML brukar jag använda mig av. I det här fallet så är det inte bara jag som ska sitta och koda, och protokollet är redan utvecklat. :l
Men jag håller med dig, XML är det man ska använda för sånt här.
LimeMedlem sedan sep. 2001961 inlägg Så det är något puckohuvud (alltså kan det inte var du SPiN) som har analyserat och systemerat felaktigt.
Du har mina djupaste sympatier.
SPiNMedlem sedan mars 20007 896 inlägg Tack. ;)
Jag har faktiskt en till fråga, som är lite mer en undran:
Om jag vill logga någonting, rätt så ofta i min applikation, vilket är det snyggaste och effektivaste sättet? Jag sneglar en hel del på Hashtable och skriver sedan den serialiserade till en fil. Finns det något bättre sätt som jag bör använda mig av?
SPiNMedlem sedan mars 20007 896 inlägg Hm, kanske man ska föredra att skriva i plaintext, så att användarna kan öppna logfilerna med i stort sett vilket verktyg som helst - utan att vara tvungna att läsa dem genom applikationen?
Lime> Ja, jag funderar på att skriva logfilen i XML-format. :e ;)
SPiNMedlem sedan mars 20007 896 inlägg *bump*
Vad är egentligen snabbast att använda? Reguljära uttryck eller en Tokenizer? Reguljära uttryck ser ju lite trevligare ut, men är det söligt så är det ingenting som lockar... :)
spangoMedlem sedan juni 20008 205 inlägg Beror väl på vad man ska göra, regexpar måste ju kompileras och är ju mer komplicerade än tokenizers. Skulle nog gissa att tokenizers är snabbare på själva uppsplittandet, men om man ska slänga till ett ton extrakod för att hantera alla tokens i stället för att använda några små gulliga regexpar kan det säkert bli slöare. I ditt fall kan jag nog tänka mig att tokenizers blir snabbare.
SPiNMedlem sedan mars 20007 896 inlägg Tackar, tackar för funderingen, får se var det slutar. Snygg kod är ju allt mycket trevligare... :)
Om jag vill logga någonting, rätt så ofta i min applikation, vilket är det snyggaste och effektivaste sättet?
Använd Log4J eller den loggningsfunktionalitet som finns (tror jag :)) i 1.4, det är enklast OCH effektivast.
http://jakarta.apache.org/log4j/docs/index.html