如何解析具有多个分隔符的文件

我需要解析这种格式的文件,这样我就可以通过避免换行或“/ n”,回车0r“/ r”,^^(空格)来获取/获取代替这些标签的值。 只是给我一个示例代码的想法,这有助于我继续……

^^^ M ^^^ COMPLD(^^^“[,]:,,, [],[],[],[] [,] [:[],[] [,[,],[:[ ] [,]]]“)*;

假设响应属于这种类型:我需要获取每个字段值,

RTRV-HDR ::: RH01; [2K

SIMULATOR 09-11-18 13:49:03 M RH01 COMPLD; 剂> RTRV-EQPT :: ALL:RE01; [2K

SIMULATOR 09-11-18 13:49:04 M RE01 COMPLD“SLOT-1-1-1,CMP:IS-NR”“SLOT-1-1-2,CMP:IS-NR”“SLOT-1-1 -3,OLC:IS-NR“”SLOT-1-1-4,OLC:IS-NR“”SLOT-1-1-5,OLC:IS-NR“”SLOT-1-1-6,OLC: IS-NR“”SLOT-1-1-7,OLC:IS-NR“”SLOT-1-1-8,OLC:IS-NR“”SLOT-1-1-9,IOC:IS-NR“” SLOT-1-1-10,IOC:IS-NR“”SLOT-1-2-1,NMC:IS-NR“”SLOT-1-2-2,NMC:IS-NR“”SLOT-1-2 -3,OLC:IS-NR“”SLOT-1-2-4,OLC:IS-NR“”SLOT-1-2-5,OLC:IS-NR“”SLOT-1-2-6,OLC: IS-NR“”SLOT-1-2-7,OLC:IS-NR“”SLOT-1-2-8,OLC:IS-NR“; 剂> RTRV-ALM-EQPT :: ALL:RA01; [2K

SIMULATOR 09-11-18 13:49:05 M RA01 COMPLD“SLOT-1-1-1,CMP:MN,T-FANCURRENT-1-HIGH,NSA,01-10-09,00-00-00 ,, :\“Fan-T \”,“”SLOT-1-1-1,CMP:MJ,T-BATTERYPWR-2-LOW,NSA,01-10-09,00-00-00 ,,:“\”电池-T \“,”“SLOT-1-1-2,CMP:CR,PROC_FAIL,SA,09-11-18,13-48-54 ,,:\”处理器故障\“,”“SLOT-1- 1-3,OLC:MN,T-LASERCURR-1-HIGH,SA,01-10-07,13-21-03 ,,:\“Laser-T \”,“”SLOT-1-1-3, OLC:MJ,T-LASERCURR-2-LOW,NSA,01-10-02,21-32-11 ,,:“Laser-T”,“”SLOT-1-1-4,OLC:MN, T-LASERCURR-1-HIGH,SA,01-10-05,02-14-03 ,,:\“Laser-T \”,“”SLOT-1-1-4,OLC:MJ,T-LASERCURR- 2-LOW,NSA,01-10-04,01-03-02 ,,:\“Laser-T \”,“; 代理> RTRV-ALM-EQPT :: ALL:RA02 :: MJ ,; [2K

SIMULATOR 09-11-18 13:49:06 M RA02 COMPLD“SLOT-1-1-1,CMP:MJ,T-BATTERYPWR-2-LOW,NSA,01-10-09,00-00-00 ,, :\“Battery-T \”,“”SLOT-1-1-3,OLC:MJ,T-LASERCURR-2-LOW,NSA,01-10-02,21-32-11 ,,:“激光-T \“,”“SLOT-1-1-4,OLC:MJ,T-LASERCURR-2-LOW,NSA,01-10-04,01-03-02 ,,:\”Laser-T \“ ,“; 代理> RTRV-ALM-EQPT :: ALL:RA03 :: MN ,; [2K

SIMULATOR 09-11-18 13:49:06 M RA03 COMPLD“SLOT-1-1-1,CMP:MN,T-FANCURRENT-1-HIGH,NSA,01-10-09,00-00-00 ,, :\“Fan-T \”,“”SLOT-1-1-3,OLC:MN,T-LASERCURR-1-HIGH,SA,01-10-07,13-21-03 ,,:“激光-T \“,”“SLOT-1-1-4,OLC:MN,T-LASERCURR-1-HIGH,SA,01-10-05,02-14-03 ,,:\”Laser-T \“ ,“; 剂> RTRV-ALM-EQPT :: ALL:RA04 :: MN,T-LASERCURR-1-HIGH; [2K

SIMULATOR 09-11-18 13:49:10 M RA04 COMPLD“SLOT-1-1-3,OLC:MN,T-LASERCURR-1-HIGH,SA,01-10-07,13-21-03 ,, :\“Laser-T \”,“”SLOT-1-1-4,OLC:MN,T-LASERCURR-1-HIGH,SA,01-10-05,02-14-03 ,,:“激光-T \“,”; 代理> RTRV-PM-EQPT :: ALL:RP01; [2K

SIMULATOR 09-11-18 13:49:11 M RP01 COMPLD“SLOT-1-1-1,CMP:FANCURRENT-1,180.080 ,,,,,”“SLOT-1-1-1,CMP:FANCURRENT-2,204.660 ,, ,,,“”SLOT-1-1-1,CMP:FANCURRENT-3,230.500 ,,,,,“”SLOT-1-1-1,CMP:FANCURRENT-4,187.580 ,,,,,“”SLOT-1-1 -1,CMP:BATTERYPWR-1,53.650 ,,,,,“”SLOT-1-1-1,CMP:BATTERYPWR-2,53.650 ,,,,,“”“SLOT-1-1-2,CMP:FANCURRENT -1,180.080 ,,,,,“”SLOT-1-1-2,CMP:FANCURRENT-2,204.660 ,,,,,“”SLOT-1-1-2,CMP:FANCURRENT-3,230.500 ,,,,,“”SLOT -1-1-2,CMP:FANCURRENT-4,187.580 ,,,,,“”SLOT-1-1-2,CMP:BATTERYPWR-1,53.650 ,,,,,“”“SLOT-1-1-2,CMP :BATTERYPWR-2,53.650 ,,,,,“”SLOT-1-1-3,OLC:LASERPWR-1,200.00 ,,,,,“”SLOT-1-1-3,OLC:LASERPWR-2,200.00 ,,,, ,“”SLOT-1-1-4,OLC:LASERPWR-1,200.00 ,,,,,“”SLOT-1-1-4,OLC:LASERPWR-2,200.00 ,,,,,“”SLOT-1-1-5 ,OLC:LASERPWR-1,200.00 ,,,,,“”SLOT-1-1-5,OLC:LASERPWR-2,200.00 ,,,,,“”SLOT-1-1-6,OLC:LASERPWR-1,200.00 ,,,, ,“”SLOT-1-1-6,OLC:LASERPWR-2,200.00 ,,,,,“”SLOT-1-1-7,OLC:LASERPWR-1,200.00 ,,,,,“”SLOT-1-1-7 ,OLC:LASERPWR-2,200.00 ,,,,,“”SLOT-1-1-8,OLC:LASERPWR-1,200.00 ,,,,,“”SLOT- 1-1-8,OLC:LASERPWR-2,200.00 ,,,,,“”SLOT-1-2-3,OLC:LASERPWR-1,200.00 ,,,,,“”“SLOT-1-2-3,OLC:LASERPWR- 2,200.00 ,,,,,“”SLOT-1-2-4,OLC:LASERPWR-1,200.00 ,,,,,“”SLOT-1-2-4,OLC:LASERPWR-2,200.00 ,,,,,“”SLOT- 1-2-5,OLC:LASERPWR-1,200.00 ,,,,,“”SLOT-1-2-5,OLC:LASERPWR-2,200.00 ,,,,,“”“SLOT-1-2-6,OLC:LASERPWR- 1,200.00 ,,,,,“”SLOT-1-2-6,OLC:LASERPWR-2,200.00 ,,,,,“”SLOT-1-2-7,OLC:LASERPWR-1,200.00 ,,,,,“”SLOT- 1-2-7,OLC:LASERPWR-2,200.00 ,,,,,“”SLOT-1-2-8,OLC:LASERPWR-1,200.00 ,,,,,“”“SLOT-1-2-8,OLC:LASERPWR- 2,200.00 ,,,,,“; 剂> INIT-SYS :: SLOT-1-1-2:IS01 :: 1; [2K

SIMULATOR 09-11-18 13:49:11 M IS01 COMPLD; 代理>

感谢所有有价值的回复

你的问题很短,所以很难猜出你的意思,但是使用StreamTokenizer可能会有所帮助。

我认为你应该有一个动态聚合器,它接收输入并将相干线粘合在一起,使你的表达式更容易在这些行上做。 F.ex. 你可以有一个Iterator,用你编写的那些行包装另一个迭代器,查找相干的行并将它们存储在StringBuffer中。 当您发现所有相干线形成一条线时,您将在next()方法中返回它。

我认为你应该使用StringTokenizer

String s = ""; StringTokenizer st = new StringTokenizer("yourString" , "-,\n"); //You can add delimiters while(!(st.hasMoreTokens())){ s += st.nextToken() + "\n"; }