繁体   English   中英

Java字符串拆分问题

[英]Java String Split Problem

我有一个字符串,例如

397 Walker Road                                   Wayne, PA  19087

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

我在逗号上分割了字符串,并提取了状态和邮政编码。 但是对于如何使城市摆脱困境感到迷茫,尤其是因为空白区域不一致。

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

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

问题是,数据库中的空白量不一致。
如果不同的数据字段之间至少有两个空格,则应执行以下操作: s.split("\\\\s\\\\s+") 两个或更多个空格字符的每个序列在此处都将被视为定界符。
但是,如果数据可以是任何格式,并且根本没有一致性,那么没有算法可以帮助您:)

好,这是我的版本:

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 Walker Road Wayne,PA 19087

以“韦恩”为城市

盐湖城沃克路397号,宾夕法尼亚州19087

以“盐湖城”为城市

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

另外,您可能必须对常见的“街道”结尾进行匹配,例如道路,rd,街道,st [hmm,st。 =圣人,可能是个问题],大道,大道等

抱歉,Pete,我想我们需要进一步了解您的数据集是什么样,以及您还可以使用哪些其他数据(仅限美国?,城市列表?等)。

罗杰

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM