从JAVA中的主字符串中提取子字符串属性和值

时间:2012-09-07 11:28:26

标签: java

我有以下字符串:

\018attribute1=value1\028attribute2=value2\033attribute3=value3

注意: "\0xx"是一个硬字符串,没有特殊字符包含且"\0xx"是随机的。我从api获取此字符串,它包含“\”字符。

我想提取属性名称和属性值

怎么做?

2 个答案:

答案 0 :(得分:3)

您需要两次转义\字符。一次用于Java,一次用于正则表达式。这将其变为\\\\。然后,您可以使用PatternMatcher来构建值的地图:

Pattern p = Pattern.compile("\\\\0..([^=]+)=([^\\\\]*)");
Matcher matcher = p.matcher("\\018attribute1=value1\\028attribute2=value2\\033attribute3=value3");
Map<String, String> attributes = new HashMap<String, String>();
while (matcher.find()) {
    attributes.put(matcher.group(1), matcher.group(2));
}

答案 1 :(得分:1)

这样的事情对我有用:

String str = "\\018attribute1=value1\\028attribute2=value2\\033attribute3=value3";
Pattern p = Pattern.compile("0\\d{2}(.*?)=(.*?)(\\\\|$)");
Matcher m = p.matcher(str);
while(m.find())
{
    System.out.println(m.group(1));
    System.out.println(m.group(2));
    System.out.println("-------");
}

它屈服了:

attribute1
value1
-------
attribute2
value2
-------
attribute3
value3

正则表达式假定您需要匹配的模式始终以反斜杠后跟2位数(\ 0xx)开头。然后它将提取第一个子串,直到它达到等号。一旦它与等号匹配,它将保持匹配,直到它遇到另一个斜杠或者字符串的结尾。

如果你没有这三个数字,你可以用\0\w{2}行代替它,这将匹配零,后跟任何字母,数字或下划线。