Java解析此特定字符串而没有唯一分隔符

时间:2014-01-02 19:38:11

标签: java parsing html-parsing

我有一个像这样的字符串

String a = "background-image: url(www.google.com); background-repeat: no-repeat;-webkit-background-size: 1001px 1903px;height: 1903px; width: 1001px; text-align: center; margin: 0 auto;";

我必须从字符串中获取height:和width:值,并将其替换为表单中用户输入的值。解析它的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

你可以用分号然后用冒号分割并创建一个地图。

String a = "background-image: url(www.google.com); background-repeat: no-repeat;-webkit-background-size: 1001px 1903px;height: 1903px; width: 1001px; text-align: center; margin: 0 auto;";
HashMap kv = new HashMap();
for(String b : a.split(";")){
    String[] temp = b.split(":");
    kv.put(temp[0], temp[1]);
} 

然后你可以按键设置值

kv.put("height", "2048px");
kv.put("width", "86em");

HashMap toString方法生成类似于原始的输出。你只需稍微调整一下

kv.toString().replaceAll("=", ":").replace("{", "").replace("}", "")

需要注意的一点是,键的顺序变得混乱,并且不是输入字符串的“按顺序”

height:2048px, text-align:center, -webkit-background-size:1001px 1903px, width:86em, margin:0 auto, background-repeat:no-repeat, background-image:url(www.google.com)

答案 1 :(得分:0)

使用正则表达式提取它。每个只需要一行:

String height = html.replaceAll(".*(?<=height: )(.*?)(?=;).*", "$1");
String width = html.replaceAll(".*(?<=width: )(.*?)(?=;).*", "$1");