【问题标题】:Split string using regular expressions [closed]使用正则表达式拆分字符串[关闭]
【发布时间】:2012-10-06 18:21:01
【问题描述】:

我需要对我的 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");
}

}

【问题讨论】:

  • 你已经尝试了什么?
  • Java标签足以说明“这个问题属于Java语言”
  • 没关系,我解决了。忘记在 else if 语句的正则表达式中添加“+”。
  • 仅供参考,while 循环中的条件应该是 file.hasNextLine(),而不是 file.hasNext()

标签: java regex string expression


【解决方案1】:

你试过String.split()?

"New York,Los Angeles".split(",")

【讨论】:

  • 我将使用它,但首先我必须确保字符串的格式正确。例如,字符串中除了那个逗号之外不能有数字或标点符号。所以额外的逗号也是被禁止的。我正在处理从文件中获取的数据,因此无法对其进行硬编码。
  • @user1642677 你的问题中没有说明。首先表现出一些努力并询问您的代码中哪里有问题。 SO 不会为你做脏活。
  • 好的,我会发布我目前所做的。
  • 对于 "Pompano, Satellite Beach".split(,) 第二个字符串会有一个空格,没错。您可以在拆分后删除空格,也可以试试这个:"Pompano, Satellite Beach".split(, *)。为了检查名称是否有效,您可以在拆分后迭代字符串。尝试匹配这个正则表达式 `[^a-zA-z -]` 来检测是否有除 a-z、A-Z、" " 或 "-" 之外的字符。
【解决方案2】:

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

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

data.matches("^[a-z A-Z]+(?<! ),(?! )[a-z A-Z]+$")

【讨论】:

    猜你喜欢
    • 2018-07-05
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 2017-02-23
    相关资源
    最近更新 更多