2017-02-14 7 views
0

Я пытался извлечь часть строки. Я делаю это в Android-приложении (Java).Java (Android) - Извлечение части строки, между двумя конкретными словами

Моя проблема заключается в том, что я буду иметь строку, которая начинается так:

Местоположение [слитый 20,, -30.9876 согл = 20 (...)

, который представляет текущие координаты устройства (я составил 20 и -30) и некоторые другие измерения. Я хочу извлечь 2 координаты из этой строки (они всегда будут находиться между «сплавленными» и «acc») и сохранять их как float.

Я огляделся и пришел к выводу, что, вероятно, RegExs необходимы для решения этой проблемы, но имейте в виду, что я использовал только регулярные выражения раньше, и я все еще очень неопытен с ними.

Любые указания относительно того, как это решить, будем очень благодарны!

+0

use String.split() https://www.tutorialspoint.com/java/java_string_split.htm –

+1

, если всегда есть место до и после координаторов, вы можете получить как coo rdinators без использования RegEx. 'String location =" Местоположение [fused 20., -30.9876 acc = 20 "; location = location.substring (location.indexOf (""), location.lastIndexOf ("")); Строка locationArr [] = location.split (","); System.out.println ("lat:" + locationArr [0]); System.out.println ("long:" + locationArr [1]); ' –

ответ

1

RegExr является отличным местом для обучения и строительства регулярного выражения: http://regexr.com/

Matching вашей строки с этим регулярным выражением даст вам 2 координаты:

fused\s(-?\d+\.\d+),(-?\d+\.\d+)\s 

Скопируйте это выражение RegExr, чтобы увидеть, что каждое этих символов.

Чтобы использовать регулярное выражение в Java, вам необходимо убедиться, что вы убегаете символы обратной косой черты (добавить дополнительный обратный слэш)

В Java:

public static void main(String[] args) { 
    String yourString = "Location[fused 20.,-30.9876 acc=20 "; 

    Pattern pattern = Pattern.compile("fused\\s(-?\\d+\\.\\d+),(-?\\d+\\.\\d+)\\s"); 
    Matcher matcher = pattern.matcher(yourString); 
    if(matcher.find()) { 
     String coordinate1 = matcher.group(1); 
     String coordinate2 = matcher.group(2); 
     System.out.println(coordinate1); 
     System.out.println(coordinate2); 
    } 
} 

Выход:

20.
-30.9876 
+0

Он отлично работает! И спасибо за подсказку, я не знал об этом сайте. Это выглядит очень полезно для практики Regexs –