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?
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.
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.
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?
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 ;)
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... :)
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.