2010-08-23 60 views
1

我有一个字符串,如的Java字符串分割问题

397 Walker Road         Wayne, PA 19087 

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

我已经在逗号分隔了字符串,并提取了状态和zip。但是,如何让这座城市远离这个城市,特别是因为白色空间不一致,我们感到茫然。

回答

3

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

+0

是的,这是我需要的 – Pete 2010-08-23 16:19:01

0

问题是,数据库中的空白量不一致。
如果不同的数据字段之间至少有两个空格,则应该这样工作:s.split("\\s\\s+")。每个两个或多个空白字符的序列在这里将被视为分隔符。
但如果数据可以是任何格式,并有完全没有一致性,没有算法可以帮助你:)

3

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

+1

只是想知道..为什么我们需要寻找字符后的数字?如果用户要填写地址,那么他/她也可能以错误的顺序给出地址(错误地)。 – Shekhar 2010-08-23 04:50:45

0

OK,这里是我的版本:

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

我觉得皮特的意思是,

397获嘉道韦恩,PA 19087

有 “韦恩” 作为城市

397获嘉道盐湖城,PA 19087

以“盐湖城”为城市

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

或者,您可能必须在常见的“街道”结尾处进行匹配,例如道路,rd,街道,st [hmm,st。 =圣,这可能是一个问题],大道,大道等

对不起皮特,我想我们需要知道更多关于你的数据集看起来像什么,你还有什么其他数据可用(仅限美国?城市?等)

Roger

0

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