有没有更简单的方法可以在较长的字符串中找到某种格式



我正在构建一个程序并遇到了一个问题,我不知道如何最有效地征服它。

我需要编写一个采用以下格式字符串的算法:

12/05/2014 项目作业 4 20/20 100 4

它将删除所有内容,但

20

/20

所以我可以对其进行子字符串并将其解析为整数值。这是我尝试过的,但我不确定最好的方法是什么。我的 while 循环工作,从每个/到下一个,但循环只会在字符串还剩 20 100 4 时停止,我需要 20/20,但不需要 100 或 4。

String line = "12/05/2014 PROJ Assignment 4      20/20 100 4";
int slashIndex = line.indexOf("/");
String temp = line.substring((slashIndex+1));
System.out.println(temp);
while(temp.indexOf("/") != -1){
    slashIndex = temp.indexOf("/");
    temp = temp.substring((slashIndex+1));
    System.out.println(temp);
}

如果我按照我的方式做,我可能会使用最后一个斜杠的斜杠索引,然后从原始字符串创建一个子字符串 - 但是分数可能会有所不同。它可能是 20/20,也可能是 100/200 或 10/100,那么我怎样才能使程序足够动态以决定在哪里切割它?

任何想法或想法都会很棒,谢谢。

  • 康纳

只需split一个或多个空格(\s+)上的输入即可。第 5 个字段将具有零件的索引4

String t = "12/05/2014 PROJ Assignment 4 20/20 100 4";
String[] parts = t.split("\s+");
System.out.println(parts[4]);

输出:

20/20

试试这个

    str = str.replaceAll(".* (\d+/\d+) .*", "$1");
String line = "12/05/2014 PROJ Assignment 4 20/20 100 4"
String pattern = " ([0-9]{1,3}/[0-9]{1,3}) ";
String numbers = line.replaceAll(pattern, "$1");
System.out.println(numbers);

如果你想用正则表达式来做,这个,确保你得到的输入格式字符串完全相同。

我为"正则表达式的解释"创建了一个正则表达式

Pattern mypat = Pattern.compile("d{2}\/d{2}\/d{4} [A-Z]{4} w+ d? (d+/d+) d+ d?");
// ...
Matcher m = mypat.matcher("12/05/2014 PROJ Assignment 4 20/20 100 4");
if (m.matches()) {
  String value   = m.group(1);
}

创建一个与您想要的字符串匹配的正则表达式(您可能会发现有关实际正则表达式的更复杂的内容,我不是正则表达式专家),例如:

Pattern pattern = Pattern.compile("([2][0]\/[2][0])");

然后使用模式创建匹配器

Matcher m = pattern.matcher("12/05/2014 PROJ Assignment 4 20/20 100 4");

最后,如果m.matches()得到匹配的第一组:

m.group(0)

最新更新