我有一个字符串,如的Java字符串分割问题
397 Walker Road Wayne, PA 19087
我需要从中提取的地址信息(街道地址,城市,州,邮编)。问题是,数据库中的空白量不一致。
我已经在逗号分隔了字符串,并提取了状态和zip。但是,如何让这座城市远离这个城市,特别是因为白色空间不一致,我们感到茫然。
我有一个字符串,如的Java字符串分割问题
397 Walker Road Wayne, PA 19087
我需要从中提取的地址信息(街道地址,城市,州,邮编)。问题是,数据库中的空白量不一致。
我已经在逗号分隔了字符串,并提取了状态和zip。但是,如何让这座城市远离这个城市,特别是因为白色空间不一致,我们感到茫然。
您可以使用正则表达式像[\s]{2,}
这意味着找到2米或多个连续的空格,删除多余的空格。这个正则表达式不会匹配单个空格。然后,您可以用空白替换匹配的空格,然后提取城市(提取城市是不同的问题)。希望这可以帮助。
问题是,数据库中的空白量不一致。
如果不同的数据字段之间至少有两个空格,则应该这样工作:s.split("\\s\\s+")
。每个两个或多个空白字符的序列在这里将被视为分隔符。
但如果数据可以是任何格式,并有完全没有一致性,没有算法可以帮助你:)
在分割字符串之前使用trim()
方法修剪空格。然后使用正则表达式分割字符串,查找Charecter之后的数字。
只是想知道..为什么我们需要寻找字符后的数字?如果用户要填写地址,那么他/她也可能以错误的顺序给出地址(错误地)。 – Shekhar 2010-08-23 04:50:45
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]
此正则表达式查找逗号(,两侧可选空白),或至少两个空格字符。
我觉得皮特的意思是,
397获嘉道韦恩,PA 19087
有 “韦恩” 作为城市
但
397获嘉道盐湖城,PA 19087
以“盐湖城”为城市
假设逗号之前的整个部分的宽度是固定的,使用Shekhar的答案(分别为两个或多个空格的序列的左右两侧)可能会得到相当好的结果,使用[\ s] {2,}
或者,您可能必须在常见的“街道”结尾处进行匹配,例如道路,rd,街道,st [hmm,st。 =圣,这可能是一个问题],大道,大道等
对不起皮特,我想我们需要知道更多关于你的数据集看起来像什么,你还有什么其他数据可用(仅限美国?城市?等)
Roger
在所有情况下都没有办法做到这一点。你可以写一个算法,假设街道部分总是以类似Road,Street,Lane等结尾。
是的,这是我需要的 – Pete 2010-08-23 16:19:01