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

时间:2015-02-03 15:04:39

标签: java string

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

我需要编写一个以这种格式接受String的算法:

  

12/05/2014 PROJ Assignment 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);
}

如果我按照我的方式进行操作,我可能会使用最后一个斜杠的slashIndex,然后从原始String中创建一个子字符串 - 但是分数可能会有所不同。它可能是20/20,也可能是100/200或10/100,那么我怎么能让程序动态到足以决定在哪里削减它?

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

  • 康纳

5 个答案:

答案 0 :(得分:4)

只需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

答案 1 :(得分:1)

试试这个

    str = str.replaceAll(".* (\\d+/\\d+) .*", "$1");

答案 2 :(得分:0)

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);

答案 3 :(得分:0)

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

I create an regexplain for an "explication of the regex"

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);
}

答案 4 :(得分:0)

创建一个正则表达式(你可能会发现一些关于实际正则表达式更复杂的东西,我不是正则表达式专家),它匹配你想要的字符串,例如:

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)