Как проверить наличие различных видов расщепления строк в сканере - PullRequest
0 голосов
/ 12 мая 2019

Предположим, у вас есть текстовый файл, содержащий три столбца, с данными в каждом столбце.Иногда столбцы разделяются пробелами, а иногда они разделяются табуляцией, например:

С пробелами:

1 250 643
2 446 116
3 199 292
4 801 171

С вкладками:

1   352500  371500
2   381500  374500
3   304000  384500
4   431000  394000
5   355000  404000

Предположим,последние два столбца содержат координаты x и y, и они сохраняются в некотором массиве объектов местоположения Location locations[], где Location имеет некоторый конструктор, такой как public Location(double x, double y).Поэтому мы анализируем эти координаты и сохраняем их в массиве Location следующим образом:

Scanner s = new Scanner("someFile.txt");
Location locations = new Location[numberOfRowsInFile];
int i = 0;
while(i < numerOfRowsInFile) {
    String line = s.nextLine();
    String[] coordinate = line.split("\t");
    locations[i++] = new Location(Double.parseDouble(coordinate[1]),Double.parseDouble(coordinate[2])); //Parse coordinates
}

Теперь вот моя проблема.В строке String[] coordinate = line.split("\t"); это работает для текстовых файлов, когда столбцы разделены пробелами, но не когда столбцы разделены пробелами.В этом случае мне потребуется String[] coordinate = line.split(" ");.

Как я могу проверить, какой разделитель действителен?Как то так:

if (line.validSplit() == "\t")
    String[] coordinate = line.split("\t");
else if (line.validSplit() == " ")
    String[] coordinate = line.split(" ");

1 Ответ

1 голос
/ 12 мая 2019

Поскольку split() использует регулярное выражение,

Scanner s = new Scanner("someFile.txt");
Location locations = new Location[numberOfRowsInFile];
int i = 0;
while(i < numerOfRowsInFile) {
    String line = s.nextLine();
    String[] coordinate = line.split("\\s+");
    locations[i++] = new Location(Double.parseDouble(coordinate[1]),Double.parseDouble(coordinate[2])); //Parse coordinates
}

\\s+ => Разделить строку на 1 или более пробелов.

...