-1

我需要对我的 Java 正则表达式进行一些刷新。

我基本上想检测一个无效的字符串输入,如果它是有效的,我会用它做一些事情。

数据可以是任何一种形式

New York,Los Angeles

要不就

New York

城市的名称当然各不相同,所以我可以有其他形式,例如

Orlando,West Palm

Miami,Stuart

Stuart

Pompano, Satellite Beach

所以基本上我想检测这两种类型的字符串格式

  • 任何长度的只有大小写字母和空格的字符串,后跟一个逗号,然后是另一个任何长度的只有大小写字母和空格的字符串,它和逗号之间没有空格。
  • 任何长度的单个字符串,只有大写和小写字母

除了第一个字符串中的单个逗号外,任何一个字符串中都不能有数字或标点符号。所以额外的逗号也是被禁止的。

这是我到目前为止所尝试的:

    try
{
    file = new Scanner(new File(f));
    int i = 1;
    while(file.hasNext())
    {
        String[] cities;
        String data = file.nextLine();

        if(data.matches("[a-z A-Z]+,[a-z A-Z]+$"))
        {
            cities = data.split(",");
            flightLog.addPath(cities[0], cities[1]);
        }
        else if(data.matches("[a-z A-Z]$"))
        {
            flightLog.addCity(data);
        }
        else
            System.out.println("Line" + i + " is invalid\n");
        ++i;
    }
}
catch (FileNotFoundException e)
{
    System.out.println("File does not exist");
}

}

4

2 回答 2

1

你试过String.split() 吗?

"New York,Los Angeles".split(",")
于 2012-10-06T18:24:41.130 回答
1

你几乎明白了,但你需要一个正则表达式“环顾四周”来断言虽然字符串可能包含空格,但空格可能不与逗号相邻。

试试这个作为你的第一个条件:

data.matches("^[a-z A-Z]+(?<! ),(?! )[a-z A-Z]+$")
于 2012-10-06T19:15:21.847 回答