1
Scanner를 사용하여 파일에서 읽은 문자열을 분리하려고합니다. 파일 데이터는 다음과 같습니다Scanner를 사용하여 문자열 분리하는 방법
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:,,,
내가해야 할 단계는 다음과 같습니다 에서 가져 오기 길이 : 28</n0:message>
접두사이 길이 이전에 : 나머지
제거 (28)와이 문자열 토큰을 얻기 위해 호출 할 수있는 정규 표현식 : 28에서 </n0:message>
?
지금까지 문자열 토큰을 가져 오는 구분 기호가 있습니다. 그러나 나는 어떻게 멈추는 지 알지 못합니다. </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......
난 내 원시 데이터에서 원하는 모든
세 토큰입니다 : 당신이 올바른 궤도에있어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:,,,
감사합니다. Alan, 완벽하게 작동했습니다. 뒤에있는 표정과 정규 표현식에 대해 좀 더 설명 할 수 있습니까? 첫 번째 구분 기호를 이해합니다. 28도 포함되지 않으므로 첫 번째 구분 기호가됩니다. 그래서 두 번째로, 나는 regexp 또는 마지막 것을 이해하지 못한다. –
사실 나는 뒤에 보이는 모양을 이해하고 \\ z는 문자열의 끝을 의미하지만 왜 내가 사용합니까? = 첫 번째 구분 기호와? <= 두 번째? 감사합니다. 쉐인. –
두 번째 구분 기호로'(? =)'을 사용하면 세 번째 토큰의 일부가 될' '앞에 * 위치와 일치합니다. 두 번째 토큰에 머무르기를 원한다고 했으므로 대신에 * 뒤에 위치를 일치시키는 데 사용했습니다. –