我正在构建一个程序并遇到问题,我不确定如何最有效地征服它。
我需要编写一个以这种格式接受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,那么我怎么能让程序动态到足以决定在哪里削减它?
任何想法或想法都会很棒,谢谢。
答案 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)