Я пытаюсь разбить строку ниже и поместить на карту - данные ниже могут быть в одной строке или в нескольких строках. Я хочу избежать "\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]);
}
Проверьте, можно ли это сделать.
Простым решением является вызов String#trim()
:
valueMap.put(mapPair[0].trim(), mapPair[1].trim());
Конечно, можно позаботиться о том, чтобы использовать лучшее регулярное выражение, которое даже не фиксировало бы EOL
в ваших совпадающих строках.
Вы можете использовать это регулярное выражение для соответствия ключам и значениям, разделенным символом =
без захвата |
или \n
или =
:
([^=|\s]+)=([^=|\s]+)
Вы можете попробовать регулярное выражение:
\|\n?
например:
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]"
}
\n
в качестве опции и удалите\n
из значения ключа перед вставкой на карту ....