Java Split строка, содержащая символы пробела и новой строки

1

Я пытаюсь разбить строку ниже и поместить на карту - данные ниже могут быть в одной строке или в нескольких строках. Я хочу избежать "\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]);
        }

Проверьте, можно ли это сделать.

  • 0
    Затем в регулярном выражении включите \n в качестве опции и удалите \n из значения ключа перед вставкой на карту ....
Теги:

2 ответа

1
Лучший ответ

Простым решением является вызов String#trim():

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

Конечно, можно позаботиться о том, чтобы использовать лучшее регулярное выражение, которое даже не фиксировало бы EOL в ваших совпадающих строках.

Вы можете использовать это регулярное выражение для соответствия ключам и значениям, разделенным символом = без захвата | или \n или =:

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

Демо-версия RegEx

  • 0
    Спасибо. Это сработало.
  • 0
    Пожалуйста, рад, что это сработало.
1

Вы можете попробовать регулярное выражение:

\|\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]"

}
  • 0
    Спасибо. Это сработало.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню