我有一个看起来像
的文件目录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?
答案 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