我正在构建一个程序并遇到了一个问题,我不知道如何最有效地征服它。
我需要编写一个采用以下格式字符串的算法:
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)