Как получить значения из строки ниже, используя регулярное выражение в Java - PullRequest
0 голосов
/ 04 июня 2018

Я новичок в регулярных выражениях.

У меня есть строка ниже:

Hi Welcome to my site. #binid:BIN-4 #lat:23.025243 #long:72.5980293 #nottype:assign

Выходная карта: Получить карту, которая содержит все ключевые значения, как показано ниже:

bindid - BIN-4 (ключ = bindid, значение = BIN-4)

широта - 23,025243

длинна - 72,5980293

nottype - назначить

Ответы [ 3 ]

0 голосов
/ 04 июня 2018

Вы можете найти #, захватить 1+ слов с символами после в первой группе, сопоставить :, а затем захватить 1+ непробельных символов во второй группе:

String str = "Hi Welcome to my site. #binid:BIN-4 #lat:23.025243 #long:72.5980293 #nottype:assign";
Map<String, String> res = new HashMap<String, String>();
Pattern p = Pattern.compile("#(\\w+):(\\S+)");
Matcher m = p.matcher(str);
while(m.find()) {
    res.put(m.group(1),m.group(2));
    System.out.println(m.group(1) + " - " + m.group(2)); // Demo output
}

См. Java-демонстрация .

Вывод:

binid - BIN-4
lat - 23.025243
long - 72.5980293
nottype - assign

Детали шаблона :

  • # - a# символ
  • (\\w+) - группа захвата 1: одно или несколько символов слова
  • : - двоеточие
  • (\\S+) - группа захвата 2: одинили более символов без пробелов

Regex demo

0 голосов
/ 04 июня 2018

Вы можете попробовать следующий подход для этого:

String s = "Hi Welcome to my site. #binid:BIN-4 #lat:23.025243 #long:72.5980293 #nottype:assign";
        String startsWithHash = s.substring(s.indexOf('#')+1);
        String arr[] = startsWithHash.split("#");
        Map<String, String> map = new HashMap<>();
        Arrays.stream(arr).forEach(element -> map.put(element.split(":")[0], element.split(":")[1]));

        System.out.println(map.toString());

O / P:

{binid=BIN-4 , nottype=assign, lat=23.025243 , long=72.5980293 }
0 голосов
/ 04 июня 2018

вы можете расширить свое регулярное выражение следующим образом: 1) начальное разделение для получения пар (как вы это делаете сейчас) 2) для каждой пары выполните другое разделение на :, что даст вам первый элемент в качестве ключа и второй элемент в качествезначение

фрагмент кода:

public class Main {
    public static void main(String[] args) {
        Map<String, String> result = new HashMap<>();
        String input = "Hi Welcome to my site. #binid:BIN-4 #lat:23.025243 #long:72.5980293 #nottype:assign";
        String systemData = input.replace("Hi Welcome to my site. ", "");
        Arrays.asList(systemData.split("#")).forEach(pair -> {
            if (!pair.isEmpty()) {
                String[] split = pair.split(":");
                result.put(split[0], split[1]);
            }
        });

        result.entrySet().forEach( pair -> System.out.println("key: " + pair.getKey() + " value: " + pair.getValue()));
    }
}

Результат:

ключ: двоичное значение: BIN-4

ключ: значение nottype: назначить

ключ: значение шир .: 23.025243

ключ: длинное значение: 72.5980293

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...