我有一个以分号分隔的键值对。如何通过提供密钥来搜索值。我需要这个用于Mule软表达式。我知道这可以在java中完成。我正在寻找只有Regex才能找到字符串。
示例:
ABC = 123; BCD = 345; EFG = 567
如果我搜索 abc ,它应该给我 123
如何在Regex中执行此操作?它应该忽略/修剪值中的尾随空格。
答案 0 :(得分:0)
执行此操作的步骤:
;
作为分隔符=
分开,其中第一项是键,第二项是值HashMap
。map.get()
方法示例:
String data = "abc=123;bcd=345;efg=567";
HashMap<String, String> map = new HashMap<>();
for (String keyValue : data.split(";")) {
String[] temp = keyValue.split("=", 2);
map.put(temp[0], temp[1].trim());
}
System.out.println(map.get("abc"));
答案 1 :(得分:0)
<强> JAVA 强>
没有必要使用regex
,您可以使用split()
类中的String
方法执行此操作。这是一个使用streams
的示例:
String line = "abc=123;bcd=345;efg=567";
HashMap<String, String> map = Arrays
.stream(line.split(";")) //------------> splits the string where a semicolon is found
.map(val -> val.split("=", 2)) // -----> splits and convert them to the map
.collect(Collectors
.toMap(curKey -> curKey[0], // -------> retrieves the key
curVal -> curVal[1].trim(),//--> retrieves values by trimming white spaces
(a, b) -> b, HashMap::new));//-> assigns the values
System.out.println(map.get("abc"));
输出: 123
<强> REGEX:强>
使用正则表达式,您可以使用以下表达式检索值:
([\\w]+)?=([\\w\\s]+)?;?
例如:
String line = "abc=123;bcd=345;efg=567";
String search = "abc"; // -------------------------> key to search the chain
String regex = "([\\w]+)?=([\\w\\s]+)?;?"; // -----> regex expression
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
if (search.equals(matcher.group(1))){
System.out.println(matcher.group(2).trim()); // ----> Gets the value
}
}
输出: 123