Как обработать неожиданный пробел при разбиении строки на пробел в Java - PullRequest
2 голосов
/ 04 марта 2020

Я принимаю файл построчно, и каждая строка имеет различное количество строк, разделенных пробелом, как показано ниже. Это одна строка из файла. Код работает, как и ожидалось, за исключением случая этой строки, где здесь есть неожиданный пробел, как в El Paso: EL PASO*TX*K4. Я бы использовал определенные индексы для каждой строки, если бы в строке было фиксированное количество строк, но их нет. В некоторых строках будет всего 7 строк, а в других - до 21 строки. У любого есть хорошая идея о том, как лучше всего справиться с этой ситуацией?

NAV3ELP VORTAC ALIBY*NM*K2 ANJIE*TX*K4 CINAG*TX*K4 EL PASO*TX*K4 FABAN*TX*K4 FANNY*TX*K4 FARCY*TX*K4 FEMOL*TX*K4 FIGMO*TX*K4 GIFEN*TX*K4 GREBE*NM*K2 HANCH*NM*K2 JIDEN*TX*K4 KEYLO*TX*K4 LINZY*TX*K4 NOCIG*TX*K4 NUQUH*TX*K4 PIERS*TX*K4 RIOWE*TX*K4 RISGE*TX*K4 RUTER*NM*K2

    public Nav3Data parseRecord(String dataLine) {
        // check record type
        if(!dataLine.startsWith("NAV3")) return null;

        Nav3Data theNav = new Nav3Data();
        // parse Navaid ID
        theNav.setNavaidID(dataLine.substring(NAVAID_ID_START_IDX, NAVAID_ID_END_IDX).trim());
        // parse fixes
        String[] fixes = dataLine.substring(FIX_IDS_START_IDX, FIX_IDS_END_IDX).split("\\s+"); 
        theNav.setFixIDs(fixes);
        return theNav;
    }

Ответы [ 2 ]

3 голосов
/ 04 марта 2020

Разделить на 2 или более пробелов:

dataLine.substring(FIX_IDS_START_IDX, FIX_IDS_END_IDX).split("\\s{2,}")
1 голос
/ 04 марта 2020

Два варианта: a) Либо разделить на несколько символов пробела. B) Если пробел между разделами известен и является постоянным, явно разделить это значение.

...