Проблема разделения строки Java - PullRequest
1 голос
/ 23 августа 2010

У меня есть строка, такая как

397 Walker Road                                   Wayne, PA  19087

Мне нужно извлечь из нее информацию об адресе (адрес, город, штат, почтовый индекс).Проблема в том, что количество пробелов в базе данных не согласовано.

Я разбил строку на запятую и извлек состояние и почтовый индекс.Но я в растерянности относительно того, как вывести город оттуда, особенно из-за того, что пустое пространство противоречиво.

Ответы [ 6 ]

3 голосов
/ 23 августа 2010

Перед разбиением строки обрежьте пробелы, используя метод trim(). Затем разбейте строку, используя регулярное выражение, ища число после Charecter.

3 голосов
/ 23 августа 2010

Вы можете удалить дополнительные пробелы, используя регулярное выражение, например [\s]{2,}, что означает поиск 2 или более последовательных пробелов. Это регулярное выражение не будет соответствовать одному пробелу. Затем вы можете заменить совпадающие пробелы пустыми, а затем извлечь город (извлечение города - другая проблема). Надеюсь, это поможет.

0 голосов
/ 23 августа 2010

Нет способа сделать это во всех случаях.Вы можете написать алгоритм, который предполагает, что часть улицы всегда заканчивается чем-то вроде Road, Street, Lane и т. Д.

0 голосов
/ 23 августа 2010

Я думаю, что Пит означает, что

397 Уокер Роуд Уэйн, Пенсильвания 19087

Имеет "Уэйн" как город

Но

397 Уолкер-роуд Солт-Лейк-Сити, Пенсильвания 19087

Имеет "Солт-Лейк-Сити" в качестве города

Предполагая, что весь раздел перед запятой имеет фиксированную ширину, вы, вероятно, получите довольно хороший результат, используя ответ Шекхара (слева и справа от последовательности из двух или более пробелов соответственно), используя [\ s] {2,}

В качестве альтернативы вам может потребоваться сопоставить общие "уличные" окончания, такие как road, rd, street, st [hmm, st. = святой, это может быть проблемой], проспект, пр., и т. д.

Извините, Пит, я думаю, нам нужно больше узнать о том, как выглядит ваш набор данных, и какие другие данные у вас есть (только для США? Список городов? И т. Д.)

Роджер

0 голосов
/ 23 августа 2010

ОК, вот моя версия:

final String str = "397 Walker Road                                   Wayne, PA  19087";
final String[] tokens = str.split("(\\s*,\\s*|\\s{2,})");
System.out.println( Arrays.toString(tokens));

Вывод:

[397 Walker Road, Wayne, PA, 19087]

Это регулярное выражение ищет запятую (с дополнительными пробелами с обеих сторон) или как минимум два пробельных символа.

0 голосов
/ 23 августа 2010

Проблема в том, что количество пробелов в базе данных не согласовано.
Если в разных полях данных есть как минимум два пробела, должно сработать что-то вроде этого: s.split("\\s\\s+"). Здесь каждая последовательность из двух или более пробельных символов будет считаться разделителем.
Но если данные могут быть в любом формате и нет никакой согласованности, никакой алгоритм не поможет вам:)

...