Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java字符串拆分问题_Java_Regex_Split - Fatal编程技术网

Java字符串拆分问题

Java字符串拆分问题,java,regex,split,Java,Regex,Split,我有一个字符串,比如 397 Walker Road Wayne, PA 19087 我需要从中提取地址信息(街道地址、城市、州、邮政编码)。问题是,数据库中的空白量不一致 我已经在逗号上拆分了字符串,并提取了state和zip。但我对如何让城市走出去感到困惑,尤其是因为空白区是不一致的 问题是,数据库中的空白量不一致。 如果不同的数据字段之间至少有两个空格,类似这样的操作应该会起作用:s.split(\\s\\s+)。两个

我有一个字符串,比如

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

我已经在逗号上拆分了字符串,并提取了state和zip。但我对如何让城市走出去感到困惑,尤其是因为空白区是不一致的

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

问题是,数据库中的空白量不一致。
如果不同的数据字段之间至少有两个空格,类似这样的操作应该会起作用:
s.split(\\s\\s+)
。两个或两个以上空白字符的每个序列将被视为此处的分隔符。

但是,如果数据可以是任何格式,并且完全没有一致性,那么没有任何算法可以帮助您:)

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

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

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

拆分字符串之前,请使用
trim()
方法修剪空白。然后使用正则表达式拆分字符串,查找字符后面的数字。

好的,下面是我的版本:

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]
此正则表达式查找逗号(两边都有可选的空格)或至少两个空格字符。

好的,下面是我的版本:

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]

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

我想Pete的意思是

宾夕法尼亚州韦恩沃克路397号,邮编19087

有“韦恩”作为城市

但是

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

有“盐湖城”作为城市吗

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

或者,您可能必须对常见的“街道”结尾进行匹配,例如road、rd、street、st[hmm,st.=saint,这可能是个问题]、avenue、ave等

抱歉,皮特,我想我们需要更多地了解您的数据集是什么样子,以及您有哪些其他可用数据(仅限美国?、城市列表?)等


罗杰我想皮特的意思是

宾夕法尼亚州韦恩沃克路397号,邮编19087

有“韦恩”作为城市

但是

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

有“盐湖城”作为城市吗

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

或者,您可能必须对常见的“街道”结尾进行匹配,例如road、rd、street、st[hmm,st.=saint,这可能是个问题]、avenue、ave等

抱歉,皮特,我想我们需要更多地了解您的数据集是什么样子,以及您有哪些其他可用数据(仅限美国?、城市列表?)等


罗杰

在所有情况下都无法做到这一点。您可以编写一个算法,假设街道部分始终以道路、街道、车道等结尾。

在所有情况下都无法做到这一点。您可以编写一个算法,假设街道部分始终以道路、街道、车道等结尾。

只是想知道。。为什么我们需要在字符后查找数字?如果用户要填写地址,那么他/她也可能(错误地)按错误的顺序给出地址。只是想知道。。为什么我们需要在字符后查找数字?如果用户要填写地址,那么他/她可能也会(错误地)按错误的顺序给出地址。