Как разобрать строку NMEA?

В приложении под Android получаю данные со спутника в формате NMEA. Пытаюсь эти строки разобрать, но как-то не очень получается.
Пример строки: $GPGSA,A,3,04,11,19,32,01,,,,,,,,8.16,6.83,4.47*0B
Из этой строки мне надо вытащить номера спутников, в этом примере это: 04, 11, 19,32,01. Парсинг делаю следующим образом:
nmea = "$GPGSA,A,3,04,11,19,32,01,,,,,,,,8.16,6.83,4.47*0B";
String[] subs = new String[10];
StringTokenizer st = new StringTokenizer(nmea, ",");
int i=0;
while (st.hasMoreElements()){
       Pattern p = Pattern.compile("\\d{2}");
       Matcher m = p.matcher(st.nextElement().toString());
       if(m.matches()){
             subs[i] = st.nextElement().toString();
             Log.d(LOG_TAG, "Элемент "+i+": " + subs[i]);
             i++;
        }
}

В результате в лог мне выводится следующее:
Элемент 0: 11
Элемент 0: 32
Элемент 0: 8.16
Помогите написать правильное выражение.
  • Вопрос задан
  • 2669 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Читаем описание nmea$GPGSA
nmea = "$GPGSA,A,3,04,11,19,32,01,,,,,,,,8.16,6.83,4.47*0B";
String[] parts = nmea.split('[,*]');
String[] PRNs = new String[12];
for (int i = 0; i < 12 && parts[i+3] != ''; i++) {
    PRNs[i] = parts[i+3];
    Log.d(LOG_TAG, "Элемент "+Integer.toString(i)+": "+PRNs[i];
}
Ответ написан
Комментировать
@Afdenis Автор вопроса
Спасибо, так все работает! Но все-так интересно, почему мое условие не работает? Ведь если убрать проверку на совпадение \\d{2}, то в лог выводятся все элементы разделенные запятыми, за исключением пустых.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы