【问题标题】:Java String Split ProblemJava 字符串拆分问题
【发布时间】:2010-08-23 04:41:18
【问题描述】:

我有一个字符串,比如

397 Walker Road                                   Wayne, PA  19087

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

我已经用逗号分割了字符串,并提取了状态和 zip。但是我不知道如何让这座城市离开那里,特别是因为白色空间不一致。

【问题讨论】:

    标签: java regex split


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 只是想知道.. 为什么我们需要在字符后查找数字?如果用户要填写地址,那么他/她也可能会以错误的顺序(错误地)提供地址。
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        好的,这是我的版本:

        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]
        

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

        【讨论】:

          【解决方案5】:

          我认为皮特的意思是

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

          以“韦恩”为城市

          但是

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

          以“盐湖城”为城市

          假设逗号之前的整个部分是固定宽度,使用 [\s]{2,}

          或者,您可能需要对常见的“街道”结尾进行匹配,例如 road, rd, street, st [hmm, st. = 圣人,这可能是个问题]、大道、大道等

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

          罗杰

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-10-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多