如何确定字符串的末尾是否包含一组数字

时间:2018-11-02 13:47:40

标签: java regex string

目前,我正在努力解决地址标准化问题。首先,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分开。 Lipca 80r。

“ ul。Warszawska 14 10/120 / 2b”->将结果14和ul分开。华沙市

目前,我从字符串中删除了所有多余的多个空白,并按空格进行了分割,但是我完全不知道接下来该怎么做才能获得理想的结果。

在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

  1. " "空间上分开。
  2. 检查最后两个条目是否有数字。

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

    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)
相关问题