Java 有没有更简单的方法在较长的字符串中查找特定格式?

Java 有没有更简单的方法在较长的字符串中查找特定格式?,java,string,Java,String,我正在构建一个程序,但遇到了一个问题,我不知道如何最有效地克服它 我需要编写一个以这种格式接受字符串的算法: 2014年5月12日项目任务4 20/20 100 4 它会移除一切,但 20/20 然后我可以将其子串,并将其解析为一个整数值。这是我尝试过的,但我不确定最好的方法是什么。我的while循环工作,从每一个/到下一个,但是循环只会在字符串剩下201004时停止,我需要20/20,而不是100或4 String line = "12/05/2014 PROJ Assignment 4

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

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

2014年5月12日项目任务4 20/20 100 4

它会移除一切,但

20/20

然后我可以将其子串,并将其解析为一个整数值。这是我尝试过的,但我不确定最好的方法是什么。我的while循环工作,从每一个/到下一个,但是循环只会在字符串剩下201004时停止,我需要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,然后从原始字符串生成一个子字符串-但是分数可能会有所不同。它可以是20/20,也可以是100/200,或者10/100,那么我如何使程序具有足够的动态性来决定在何处进行分割呢

任何想法都会很好,谢谢

  • 康纳
只需输入一个或多个空格(
\\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
只需输入一个或多个空格(
\\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");
试试这个

    str = str.replaceAll(".* (\\d+/\\d+) .*", "$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)
创建一个与所需字符串匹配的正则表达式(您可能会发现关于实际正则表达式更复杂的东西,我不是正则表达式专家),例如:

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)

你可以用正则表达式。看起来你总是在寻找一些小数,斜杠,还有更多的小数,两边都是空白。我不记得那些特殊字符,但我认为正则表达式可以很容易地做到。格式总是一样的吗?用空格分隔的字符串,您对
5th
字符串感兴趣吗?好的,谢谢,我现在用谷歌搜索正则表达式。格式将始终相同,####/#######/##或#/#或#/##/#或#/#。它是考试或论文等的分数。字符串来自我们用来查看成绩的网站。你可以使用regex。看起来你总是在寻找一些小数,斜杠,还有更多的小数,两边都是空白。我不记得那些特殊字符,但我认为正则表达式可以很容易地做到。格式总是一样的吗?用空格分隔的字符串,您对
5th
字符串感兴趣吗?好的,谢谢,我现在用谷歌搜索正则表达式。格式将始终相同,####/#######/##或#/#或#/##/#或#/#。这是考试或论文等的分数。字符串来自我们用来查看成绩的网站。考虑到他的例子,可能是一个空格流。好吧,为什么不呢?更改。考虑到他的示例,小挑剔可能是一个空格流。好的,为什么不呢?更改。由于OP没有regexp经验,请稍作解释。由于OP没有regexp经验,请稍作解释。这将仅与
20/20
匹配。那
10/30
呢?那
200/350
呢。关于
10/100
您可以根据需要编辑正则表达式,例如:[0-9]{2}。这将只匹配
20/20
。那
10/30
呢?那
200/350
呢。那么
10/100
您可以根据需要编辑正则表达式,例如:[0-9]{2}