大家好,求助一个关于字符串解析的问题:
一个字符串内容如下:
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,就是发出一个命令后,要对返回的字符串进行解析,我要解析很多类似的字符串,取得对应的属性值后,再入库。请问该如何处理,小弟先谢谢各位了!

解决方案 »

  1.   

    总要有特征抽取出特定的行吧,
    然后把行split成数组,两行两个数组,对应起来不就可以了吗?不过如果是telnet到linux上,awk处理这个更在行。
      

  2.   

    我也就随手一写,应该可以用的,你再把当中的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);
    //然后同上处理即可读出所有的属性。
    这个方法虽然可以用,不过有点笨,权当是抛砖引玉~~
      

  3.   

    不客气。
    照理说你的id    name      age    love    class这些顺序和字段应该能事先知道,不然你也没法对应着入库是吧。
    如果这些不固定,那我上面的代码就不能这样写了。还要复杂点。
      

  4.   

    再次追问,现在问题是这样,其他条件都不变,就是下面的属性值有很多行,可以说是个集合,我该怎么把它依次取出来呢?
    例如下面这样字符串内容如下: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是端口,
    即同一个设备上可以有多个框,每一个框上可以有多个单板,每一个单板上可以有多个槽(也可以只有一个槽),每个槽上有多个端口,是这样嵌套的,那我要分别取得这个字符串中下面的那些属性值,该如何取得,万分感谢!
      

  5.   

    只能说个思路了,代码写出来太多了。
    解析string的时候因为你每行的字段数是一样多的,你就设个计数器,从0-5。读取前5个字段都读到空格就结束取值,计数器等于5的时候,也就是读第六个BSTAT字段,遇到\n换行符结束取值。然后下一次从换行符+1的位置开始读就是第二列中DID的值了,计数器也归零。直到string长度结束为止。java的string操作是基本功呀,要用到的也就是我2楼写出来的几个方法。