急!!!!!!!,关于字符串解析 的一个问题,谢谢!

founderwfi 2009-05-06 07:29:51
大家好,求助一个关于字符串解析的问题:
一个字符串内容如下:
7712769 2005-12-11 20:08:57
M 19 COMPLD
EN=0 ENDESC=成功
blktag=1
blkcount=1
blktotal=1
Frame Information of the device MA5600_10.71.62.26
---------------------------------------
id name age love class
7712769 MA5600_1 23 music 305

但是我只是想得到字符串的 下面各个属性和其对应的值,如age,值为23。其他的内容都不需要
PS:我在做telnet,就是发出一个命令后,要对返回的字符串进行解析,我要解析很多类似的字符串,取得对应的属性值后,再入库。请问该如何处理,小弟先谢谢各位了!
...全文
80 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovetysx 2009-05-09
  • 打赏
  • 举报
回复
学习了
fredy1111 2009-05-09
  • 打赏
  • 举报
回复
只能说个思路了,代码写出来太多了。
解析string的时候因为你每行的字段数是一样多的,你就设个计数器,从0-5。读取前5个字段都读到空格就结束取值,计数器等于5的时候,也就是读第六个BSTAT字段,遇到\n换行符结束取值。然后下一次从换行符+1的位置开始读就是第二列中DID的值了,计数器也归零。直到string长度结束为止。java的string操作是基本功呀,要用到的也就是我2楼写出来的几个方法。
founderwfi 2009-05-08
  • 打赏
  • 举报
回复
再次追问,现在问题是这样,其他条件都不变,就是下面的属性值有很多行,可以说是个集合,我该怎么把它依次取出来呢?
例如下面这样字符串内容如下:

7667713 2006-04-08 17:55:32
M 6 COMPLD
EN=0 ENDESC=成功.
blktag=1
blkcount=1
blktotal=1
Board information of the device 10.71.60.26
-----------------------------------------
DID FN SN PN PORT BSTAT
dev1 shelf1 1 Other1 2 Normal
dev1 shelf2 2 Other2 3 Normal
dev1 shelf2 3 Other3 4 Normal
dev1 shelf2 4 Other4 5 Normal
dev1 shelf3 5 Other5 6 Normal
dev1 shelf4 6 Other6 7 Normal
dev1 shelf4 6 Other6 8 Normal
dev1 shelf4 6 Other6 3 Normal

-----------------------------------------
PS:DID是设备ID, FN是框号,SN是单板号,PN槽号,PORT是端口,
即同一个设备上可以有多个框,每一个框上可以有多个单板,每一个单板上可以有多个槽(也可以只有一个槽),每个槽上有多个端口,是这样嵌套的,那我要分别取得这个字符串中下面的那些属性值,该如何取得,万分感谢!
fredy1111 2009-05-06
  • 打赏
  • 举报
回复
不客气。
照理说你的id name age love class这些顺序和字段应该能事先知道,不然你也没法对应着入库是吧。
如果这些不固定,那我上面的代码就不能这样写了。还要复杂点。
founderwfi 2009-05-06
  • 打赏
  • 举报
回复
谢谢大哥!
fredy1111 2009-05-06
  • 打赏
  • 举报
回复
我也就随手一写,应该可以用的,你再把当中的while写成个方法比较好。
假设你的String 是 a。

a=a.substring(a.lastIndexOf("-----")+6);//+6而不是+5是因为有一个换行符,你可以试试看,凑对了就行了
//(应该得到a是
//id name age love class
// 7712769 MA5600_1 23 music 305)
a=a.substring(a.lastIndexOf("class")+6);//同上处理方式,把换行符也弄掉了,留下a应该是7712769 MA5600_1 23 music 305
String id=a.substring(0,a.indexOf(" "));//读取第一个空格之前的id=7712769
a=a.substring(id.length(),a.length());//这时,a=" MA5600_1 23 music 305"
while(a.startsWith(" "))
{
a=a.substring(1,a.length());
}//去掉开头的空格,这时a="MA5600_1 23 music 305"
System.out.println(a);
//然后同上处理即可读出所有的属性。

这个方法虽然可以用,不过有点笨,权当是抛砖引玉~~
jinxfei 2009-05-06
  • 打赏
  • 举报
回复
总要有特征抽取出特定的行吧,
然后把行split成数组,两行两个数组,对应起来不就可以了吗?

不过如果是telnet到linux上,awk处理这个更在行。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧