没有正则表达式的Java字符串解析

时间:2012-11-26 15:46:51

标签: java string parsing

从服务器,我得到以下形式的字符串:

String x = "fixedWord1:var1 data[[fixedWord2:var2 fixedWord3:var3 data[[fixedWord4]    [fixedWord5=var5 fixedWord6=var6 fixedWord7=var7]]] , [fixedWord2:var2 fixedWord3:var3 data[[fixedWord4][fixedWord5=var5 fixedWord6=var6 fixedWord7=var7]]]] fixedWord8:fixedWord8";

(只有空格分隔word-var对组) 之后,我想将它们存储在Hashmap中,例如myHashMap.put(fixedWord1, var1);等等。

问题:
在第一个 "data[......]" -tag内,其他 "data[..........]" -tags的数量是可变的,我不知道字符串的长度提前。

我不知道如何在不诉诸String.split()的情况下处理此类字符串,我们的任务授权人(大学)不鼓励这样做。

我在互联网上搜索过,找不到合适的网站来解释这些事情 如果有经验的人可以给我一些链接到网站或类似“图表计划”之类的内容,那将是非常有帮助的。所以我可以编写一些东西。

修改 在字符串中出错( off-topic-begin “请不要” off-topic-end “),正确的字符串是(已更改fixedWord7 = var7 ---到---> fixedWord7 = [var7]):

String x = "fixedWord1:var1 data[[fixedWord2:var2 fixedWord3:var3 data[[fixedWord4]    [fixedWord5=var5 fixedWord6=var6 fixedWord7=[var7]]]] , [fixedWord2:var2 fixedWord3:var3 data[[fixedWord4][fixedWord5=var5 fixedWord6=var6 fixedWord7=[var7]]]]] fixedWord8:fixedWord8";

2 个答案:

答案 0 :(得分:1)

问题不是很清楚,但可能会有这样的事情对你有用:

Pattern p = Pattern.compile("\\b(\\w+)[:=]\\[?(\\w+)");
Matcher m = p.matcher( x );
while( m.find() ) {
   System.out.println( "matched: " + m.group(1) + " - " + m.group(2) );
   hashMap.put ( m.group(1), m.group(2) );
}

答案 1 :(得分:1)

我假设你的字符串遵循相同的模式,其中包含“data”和“[”,“]”。变量名称/值将不包含这些字符串

  1. 从原始字符串中删除字符串“data [”,“[”,“]”和“,”

    replaceAll("data[", "")
    replaceAll("[", "")
    etc
    
  2. 用空格分隔字符串:“”使用StringTokenizer或通过char循环遍历String char。

  3. 然后你会得到像

    这样的字符串数组
    fixedWorld1:var1
    fixedWorld2:var2
    ......
    fixedWorld4
    fixedWorld5=var5
    ......
    
  4. 然后再次用“:”或“=”分隔子字符串。并将名称/值放入Map