Java拆分包含管道和换行符的字符串

时间:2014-09-25 13:58:37

标签: java regex

我正在尝试拆分下面的字符串并放入地图 - 以下数据可能是单行或多行。我想在地图

中启动键名时避免使用“\ n”
    user.Split-A=1|
    user.Split-B=1|
    user.Data-C=532|

但地图是用\ nuser.Split-A = 1,\ nuser.Split-B = 1,\ nuser.Data-C = 532和\ n

创建的

这是代码 -

        Map valueMap = new HashMap<String, String>();
//Splitting string containing pipe
        for (String string : spHeader.split("\\|")) { 
            String[] mapPair = string.split("=");
            valueMap.put(mapPair[0], mapPair[1]);
        }

请检查是否可以这样做。

2 个答案:

答案 0 :(得分:2)

一个简单的解决方法是致电String#trim()

valueMap.put(mapPair[0].trim(), mapPair[1].trim());

当然可以使用更好的正则表达式来处理,这些正则表达式甚至无法捕获匹配字符串中的EOL

您可以使用此正则表达式匹配由=分隔的键和值,而不会捕获|\n=

([^=|\s]+)=([^=|\s]+)

RegEx Demo

答案 1 :(得分:1)

您可以尝试使用正则表达式:

\|\n?

e.g:

private static final Pattern REGEX_PATTERN = 
        Pattern.compile("\\|\\n?");

public static void main(String[] args) {
    String input = "user.Split-A=1|\nuser.Split-B=1|\nuser.Data-C=532|\n";

    System.out.println(java.util.Arrays.toString(
        REGEX_PATTERN.split(input)
    )); // prints "[user.Split-A=1, user.Split-B=1, user.Data-C=532]"

}