gpt4 book ai didi

java - 如何使用 'matches()' 方法查看字符串是否与格式匹配

转载 作者:行者123 更新时间:2023-12-02 11:35:09 25 4
gpt4 key购买 nike

我目前正在研究一些代码输入大约数千行字符串的项目。每行必须遵循特定的格式,如下所示:

“姓名,#,#,#,#,#,#”

其中“name”是电影的名称(我们可以假设该名称不会包含任何数字),# 是 0-10 之间的任何数字。每个值必须用逗号分隔。

我的代码如下:

if (line.matches(".*[a-zA-z].*,([0-9]|10),([0-9]|10),([0-9]|10),([0-9]|10),([0-9]|10),([0-9]|10)")) {
System.out.println("no");
}

else {
System.out.println(line);

问题是电影的标题中不能有逗号。如果有,则需要打印。但是,我的“matches()”似乎没有拾取标题中带有逗号的行。在我看来,我的代码明确指出,如果下一个条目(以逗号分隔)不是整数,则它不匹配,因此需要打印“行”。

有人能看出我哪里出了问题吗?

最佳答案

你说的规则是:

  • 行必须由 7 个逗号分隔的值组成:名称和 0-10 范围内的 6 个数字。
  • 名称不得包含逗号。
  • 我们可以假设该名称不会包含任何数字,但这并不要求它不能。

由于名称中唯一无效的字符是逗号,因此正则表达式为:

[^,]*,(?:[0-9]|10),(?:[0-9]|10),(?:[0-9]|10),(? :[0-9]|10),(?:[0-9]|10),(?:[0-9]|10)

如果您想捕获字段,您可以使用以下代码:

Pattern p = Pattern.compile("([^,]*),([0-9]|10),([0-9]|10),([0-9]|10),([0-9]|10),([0-9]|10),([0-9]|10)");
for (String line : lines) {
Matcher m = p.matcher(line);
if (! m.matches()) {
System.out.println("Invalid line: " + line);
} else {
System.out.println("Name: " + m.group(1));
System.out.println(" Values: " + m.group(2)
+ " " + m.group(3)
+ " " + m.group(4)
+ " " + m.group(5)
+ " " + m.group(6)
+ " " + m.group(7));
}
}

测试

String[] lines = { "Buffalo Bill and the Indians, or Sitting Bull's History Lesson,0,1,2,3,4,5",
"Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb,6,7,8,9,10,0",
"300,1,2,3,4,5,6"};

输出

Invalid line: Buffalo Bill and the Indians, or Sitting Bull's History Lesson,0,1,2,3,4,5
Name: Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb
Values: 6 7 8 9 10 0
Name: 300
Values: 1 2 3 4 5 6

第一个电影名称有逗号,因此不匹配。
第二个电影名称具有特殊字符(.:),但没有逗号,因此匹配。
第三部电影名称是“300”,这是一部真实的电影,所以它匹配。

关于java - 如何使用 'matches()' 方法查看字符串是否与格式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48998412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com