J'essaie d'utiliser Scanner pour décomposer une chaîne que j'ai lue à partir du fichier. données du fichier est:Comment utiliser le scanner pour rompre la chaîne
RFH ^@^@^@^B^@^@^@°^@^@^A^Q^@^@^D¸
^@^@^@^@^@^@^D¸^@^@^@
<mcd><Msd>jms_bytes</Msd></mcd>
^@^@^@d<jms><Dst>queue:///panddArchiveVerifyStep1.V001_I</Dst><Tms>1280138410102</Tms><Dlv>2</Dlv>< /jms> 571:8:*SYD01_P,31:*panddArchiveVerifyStep1.V001_I,520:454:28:panddArchiveVerifyStep1.V001,417:<?xml version="1.0" encoding="UTF-8"?> <n0:message xmlns:n0="uri:ebusiness.com"><n0:messageHeader><n0:messageType>panddArchiveVerify</n0:messageType><n0:messageVersion>001</n0:messageVersion></n0:messageHeader><n0:archiveDoc><n0:docImageID>14256448</n0:docImageID><n0:initialDispatchDatetime>2010-06-16T20:40:48.495</n0:initialDispatchDatetime><n0:processCount>0</n0:processCount></n0:archiveDoc></n0:message>,,4:cert,16:dummycertificate,4:algo,3:DES,3:sig,9:[[email protected],0:,,,
Les étapes que je dois faire sont: longueur Obtenir de : 28-</n0:message>
Prefix cette longueur avant: 28 et se débarrasser du reste
est là une expression régulière que je peux appeler pour obtenir un jeton de chaîne de: 28 à </n0:message>
? Jusqu'ici j'ai un délimiteur pour obtenir le jeton de chaîne de: 28 mais je ne sais pas comment arrêter à </n0:message>
.
Scanner s = new Scanner(rawMsg.toString()).useDelimiter("(?=:28)");
Example data
:28:panddArchiveVerifyStep1.V001,417:<?xml version="1.0" encoding="UTF-8"?><n0:message xmlns:n0="uri:ebusiness.com......
Tout ce que je veux de mes données brutes est trois jetons:
Token One:
RFH ^@^@^@^B^@^@^@°^@^@^A^Q^@^@^D¸
^@^@^@^@^@^@^D¸^@^@^@
<mcd><Msd>jms_bytes</Msd></mcd>
^@^@^@d<jms><Dst>queue:///panddArchiveVerifyStep1.V001_I</Dst><Tms>1280138410102</Tms><Dlv>2</Dlv>< /jms>
571:8:*SYD01_P,31:*panddArchiveVerifyStep1.V001_I,520:454
Token two:
:28:panddArchiveVerifyStep1.V001,417:<?xml
version="1.0" encoding="UTF-8"?>
<n0:message
xmlns:n0="uri:ebusiness.asic.gov.au"><n0:messageHeader><n0:messageType>panddArchiveVerify</n0:messageType><n0:messageVersion>001</n0:messageVersion></n0:messageHeader><n0:archiveDoc><
n0:docImageID>14256448</n0:docImageID><n0:initialDispatchDatetime>2010-06-16T20:40:48.495</n0:initialDispatchDatetime><n0:processCount>0</n0:processCount></n0:archiveDoc></n0:message>
Token three:
,,4:cert,16:
dummycertificate,4:algo,3:DES,3:sig,9:[[email protected],0:,,,
Merci Alan, cela a fonctionné parfaitement. Pouvez-vous expliquer un peu plus loin le regard derrière et les expressions régulières? Je comprends le premier délimiteur, pas trop inclus: 28, ce qui me donne le premier jeton. Donc, pour la seconde, je ne comprends pas que reg exp ou le dernier. –
En fait, je comprends le look derrière et \\ z ce qui signifie la fin de la chaîne, mais pourquoi puis-je utiliser? = Pour le premier délimiteur et? <= Pour la seconde? Merci, Shane. –
Si vous utilisiez '(? =)' comme deuxième délimiteur, il correspondrait à la position * avant * le '', qui ferait partie du troisième jeton. Vous avez dit que vous vouliez qu'il reste dans le deuxième jeton, donc j'ai utilisé un lookbehind pour correspondre à la position juste * après * à la place. –