【问题标题】:How to determine if string cotains one group of digits in the end如何确定字符串最后是否包含一组数字
【发布时间】:2018-11-02 13:47:40
【问题描述】:

目前我正在努力解决地址规范化问题。开头,ul = street。在我的国家,大多数情况下会出现格式为"ul. Marii Skłodowskiej-Curie" 的街道,街道尽头没有编号,但在特定情况下会出现类似“ul. Dywizjonu 303”这样的街道,其中 303 不是门牌号。

我有一个地址字典,我需要检查街道是否存在。第一个示例很容易验证,因为我从字符串末尾删除所有数字并将结果字符串与字典进行比较,但另一方面,在第二个示例中,如果我从字符串末尾删除所有数字,我将得到“ul.Dywizjonu”没有以正常方式与街道集成的303。

我的问题是,是否可以从字符串末尾删除多余的数字和字符并从字符串中获取最后一对或单个数字:

例如:

"ul. Warszawska 150 12/45" -> 分离结果 150 和 ul.华沙

"ul. Warszawska 17/19" -> 分离结果 17 和 ul.华沙

"ul. Lipca 80r. 90" -> 分离结果 90 和 ul.利普卡 80r.

"ul. Warszawska 14 10/120/2b" -> 分离结果 14 和 ul.华沙

目前我从字符串中删除了所有多余的多空格并被空格分割,但我完全不知道接下来我应该做什么来获得像上面这样的理想结果。

提前感谢您的所有帮助。

【问题讨论】:

  • 1.在空间上分裂。 2. 检查最后两个数组条目是否包含数字:如果两者都包含数字,则丢弃最后一个条目。如果只有最后一个条目包含“/”上的数字拆分。保留第一个条目。垃圾休息。如果我理解正确的话。
  • 知道一个数字是否是街道名称的一部分背后的规则是什么?为什么 ul. Dywizjonu 303 的 303 部分但 14 不是 ul. Warszawska 的一部分?我的直觉是,您必须在搜索到的街道名称中添加标记,直到它在您的街道列表中匹配

标签: java regex string


【解决方案1】:
  1. " " 空间上拆分。
  2. 检查最后两个条目是否有数字。

    一个。两者都有数字:检查 / 斜杠的最后一个条目。

    i. has slash: rebuild the string without the last entry.<br>
    ii. don't have slash: rebuild the complete string.<br>
    

    b.最后一个条目有数字:在/ 上拆分并在没有/ 上拆分的第二个条目的情况下重建刺痛。

代码

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 *
 * @author blj0011
 */
public class JavaApplication91
{

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        // TODO code application logic here
        List<String> results = new ArrayList();

        String data = "ul. Warszawska 150 12/45\n"
                + "ul. Warszawska 17/19\n"
                + "ul. Lipca 80r. 90\n"
                + "ul. Warszawska 14 10/120/2b";

        List<String> lines = new ArrayList(Arrays.asList(data.split("\n")));

        for (String line : lines) {
            String[] splitLine = line.split(" ");
            if (containsDigit(splitLine[splitLine.length - 1]) && containsDigit(splitLine[splitLine.length - 2])) {
                if (!splitLine[splitLine.length - 1].contains("/")) {
                    StringBuilder stringBuilder = new StringBuilder();

                    for (int i = 0; i < splitLine.length; i++) {
                        stringBuilder.append(splitLine[i]).append(" ");
                    }

                    results.add(stringBuilder.toString().trim());
                }
                else {
                    StringBuilder stringBuilder = new StringBuilder();

                    for (int i = 0; i < splitLine.length - 1; i++) {
                        stringBuilder.append(splitLine[i]).append(" ");
                    }

                    results.add(stringBuilder.toString().trim());
                }
            }
            else if (containsDigit(splitLine[splitLine.length - 1])) {
                String[] splitNumber = splitLine[splitLine.length - 1].split("/");

                StringBuilder stringBuilder = new StringBuilder();
                for (int i = 0; i < splitLine.length - 1; i++) {
                    stringBuilder.append(splitLine[i]).append(" ");
                }
                stringBuilder.append(splitNumber[0]);

                results.add(stringBuilder.toString());
            }
            else {
                //handle other cases
            }
        }

        results.forEach(System.out::println);

    }

    static boolean containsDigit(String string)
    {
        return string.matches(".*\\d+.*");
    }
}

结果

ul. Warszawska 150
ul. Warszawska 17
ul. Lipca 80r. 90
ul. Warszawska 14
BUILD SUCCESSFUL (total time: 0 seconds)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 2021-08-03
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    相关资源
    最近更新 更多