我有以下字符串:提取子串从主字符串的属性和值在JAVA
\018attribute1=value1\028attribute2=value2\033attribute3=value3
注:的"\0xx"
是硬字符串没有特殊字符包括和"\0xx"
是随机的。我从api得到这个字符串,它包含“\”字符。
我想提取属性名称和属性值
怎么办?
我有以下字符串:提取子串从主字符串的属性和值在JAVA
\018attribute1=value1\028attribute2=value2\033attribute3=value3
注:的"\0xx"
是硬字符串没有特殊字符包括和"\0xx"
是随机的。我从api得到这个字符串,它包含“\”字符。
我想提取属性名称和属性值
怎么办?
您需要两次跳过\
个字符。一次用于Java,一次用于正则表达式。这将它变成\\\\
。然后你可以使用Pattern
和Matcher
建立映射你的价值观的:
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));
}
的东西,像这样的工作对我来说:
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个数字(\ 0x X)。然后它会提取第一个子字符串,直到遇到等号。一旦匹配等号,它将继续匹配,直到它碰到另一个斜线或者字符串的结尾。
如果你没有这三位数字,你可以用\0\w{2}
这行代替它,它会匹配一个零,后面跟着任何一个字母,数字或下划线。
不,这个问题是关于特殊字符“\” – MOHAMED