-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」が最後に出現した後の任意の1桁の数字を取得します。

これを機能させるには、次のクラスをインポートする必要があります。

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

String#substringを使用して「lab」の後の部分を抽出し、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 に答える