Java字符串拆分问题

时间:2010-08-23 04:41:19

标签: java regex split

我有一个字符串,如

397 Walker Road                                   Wayne, PA  19087

我需要从中提取地址信息(街道地址,城市,州,邮编)。问题是,数据库中的空白量不一致。

我在逗号上拆分了字符串,并提取了状态和zip。但我对如何让城市离开那里感到茫然,特别是因为白色空间不一致。

6 个答案:

答案 0 :(得分:3)

您可以使用[\s]{2,}之类的正则表达式删除额外的空格,这意味着找到2个或更多连续的空格。这个正则表达式不会匹配单个空格。然后,您可以用空白替换匹配的空格,然后提取城市(提取城市是不同的问题)。希望这会有所帮助。

答案 1 :(得分:3)

在拆分字符串之前,使用trim()方法修剪空格。然后使用正则表达式分割字符串,在Charecter之后查找数字。

答案 2 :(得分:0)

问题是,数据库中的空格量不一致。
如果不同的数据字段之间至少有两个空格,则类似这样的内容应该有效:s.split("\\s\\s+")。这里将两个或多个空格字符的每个序列视为分隔符 但是,如果数据可以是任何格式并且根本没有一致性,那么没有算法可以帮助您:)

答案 3 :(得分:0)

好的,这是我的版本:

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]

此正则表达式查找逗号(两边都有可选的空格)或至少两个空白字符。

答案 4 :(得分:0)

我认为Pete的意思是

397 Walker Road Wayne,PA 19087

有“韦恩”作为城市

但是

397 Walker Road Salt Lake City,PA 19087

有“盐湖城”作为城市

假设逗号之前的整个部分是固定宽度,使用[\ s] {2,} <使用Shekhar的答案(分别是两个或多个空格的序列的左右)可能会得到相当好的结果。 / p>

或者,您可能需要在常见的“街道”结尾上进行匹配,例如road,rd,street,st [hmm,st。 = saint,这可能是一个问题],avenue,ave等

对不起Pete,我想我们需要更多地了解您的数据集是什么样的,以及您有哪些其他数据(仅限美国?,城市列表?等)

罗杰

答案 5 :(得分:0)

在所有情况下都无法做到这一点。您可以编写一个算法,假设街道部分总是以Road,Street,Lane等结尾。