-2

我有一个文件目录,看起来像

C:\projects\lab3\test\test.java

或者

C:\projects\assignment3\test\test.java

但是“lab3”或“assignment3”可以出现在目录的任何位置,不是设置目录

我想要检查目录是否包含“lab”或“assignment”并获取后面的数字。在这种情况下,“3”

这就是我到目前为止所拥有的

 if(directory.toLowerCase().contains("lab")){

 } else if (directory.toLowerCase().contains("assignment")){

 }

但我不知道如何在单词之后立即检查字符?

4

6 回答 6

3

你可以使用正则表达式:

Pattern pattern = Pattern.compile(".*(?:lab|assignment)([0-9]).*", Pattern.CASE_INSENSITIVE);
String substr = pattern.matcher(directory).replaceAll("$1");

这会在字符串中最后一次出现“lab”或“assignment”之后获取任何一位数。

为此,您需要导入以下类:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
于 2012-09-06T15:32:01.730 回答
1

您可以使用String#substring提取“实验室”之后的部分,然后使用Integer#parseInt检查它是否为整数并进行转换。

String partAfterLab = filename.substring(4);
于 2012-09-06T15:29:10.313 回答
1

这可以满足您的要求:

String directory = "C:\\projects\\lab3\\test\\test.java";
if(directory.toLowerCase().contains("lab")){
 System.out.println(directory.substring(directory.indexOf("lab")+3,   directory.indexOf("lab")+4));

         }

+3 参数是因为“lab”字符串的大小。你可以通过这种方式做得更好:

String directory = "C:\\projects\\lab3\\test\\test.java";
String myWord = "lab";
if(directory.toLowerCase().contains(myWord)){
  System.out.println(directory.substring(directory.indexOf(myWord)+ myWord.length(), directory.indexOf(myWord)+ myWord.length()+1));

         }
于 2012-09-06T15:35:49.673 回答
0

您可以使用正则表达式,例如C:\\\\projects\\\\(lab|assignment)([0-9]+)\\\\.*在“lab”或“assignment”之后提取数字。

于 2012-09-06T15:33:05.287 回答
0

使用正则表达式

public static void main(final String[] args) {
    final String dir = "C:\\projects\\lab3\\test\\test.java";

    final Pattern pattern = Pattern.compile(".*?(lab)(\\d+).*");
    final Matcher matcher = pattern.matcher(dir);
    if (matcher.find()) {
        System.out.println(matcher.group(1)); //contains lab
        System.out.println(matcher.group(2)); //contains number
    }
}
于 2012-09-06T15:35:37.740 回答
0

这是另一种方法:

Integer.valueOf(s.replaceFirst(".*(assignment|lab)([0-9]+).*", "$2"));

例如:

String assignment = "C:\\projects\\assignment3\\test\\test.java";
String lab = "C:\\projects\\lab3\\test\\test.java";
String none = "C:\\projects\\test\\test.java";

try {
    int assignmentNumber = Integer.valueOf(assignment.replaceFirst(".*(assignment|lab)([0-9]+).*", "$2"));
    System.out.println(assignmentNumber);
} catch (NumberFormatException e) {
    System.out.println("Can't find neither assignment nor lab");
}

try {
    int labNumber = Integer.valueOf(lab.replaceFirst(".*(assignment|lab)([0-9]+).*", "$2"));
    System.out.println(labNumber);
} catch (NumberFormatException e) {
    System.out.println("Can't find neither assignment nor lab");
}

try {
    int noneNumber = Integer.valueOf(none.replaceFirst(".*(assignment|lab)([0-9]+).*", "$2"));
    System.out.println(noneNumber);
} catch (NumberFormatException e) {
    System.out.println("Can't find neither assignment nor lab");
}

印刷:

3
3
Can't find neither assignment nor lab
于 2012-09-06T15:39:37.837 回答