Java:如何在字符串后返回单个字符

时间:2012-09-06 15:25:36

标签: java string search

我有一个看起来像

的文件目录
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")){

 }

但我不知道如何在这个词之后直接检查char?

6 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

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

String partAfterLab = filename.substring(4);

答案 2 :(得分: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));

         }

答案 3 :(得分:0)

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

答案 4 :(得分: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
    }
}

答案 5 :(得分: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