java.util.Scanner を使って書いてみました。
java
1import java.util.Scanner;
2import java.util.ArrayList;
3import java.io.File;
4
5public class Main {
6 public static void main(String[] args) throws Exception {
7 String fname = "Main.java";
8 Scanner sc = new Scanner(new File(fname));
9 sc.useDelimiter("[^\w\.\"]+|\"[^\"]*\"");
10 ArrayList<String> c_name = new ArrayList<>();
11 ArrayList<String> p_name = new ArrayList<>();
12 ArrayList<String> i_name = new ArrayList<>();
13 while (sc.hasNext()) {
14 String s = sc.next();
15 if (s.equals("class")) c_name.add(sc.next());
16 else if (s.equals("package")) p_name.add(sc.next());
17 else if (s.equals("import")) i_name.add(sc.next());
18 }
19 System.out.println("Class");
20 for (String s : c_name) System.out.println(" " + s);
21 System.out.println("Package");
22 for (String s : p_name) System.out.println(" " + s);
23 System.out.println("Import");
24 for (String s : i_name) System.out.println(" " + s);
25 }
26}
コメントの中に class や import などがあると誤認識します。
追記
import で名前に *
を含めるため、useDelimiter の引数を変更しました。また、
見つかった名前を ArrayList にため込まず、その場で表示するようにしました。
java
1//package abc.def.ghi
2
3import java.util.*; // List, Arrays, Scanner
4import java.io.File;
5
6public class Main {
7 public static void main(String[] args) throws Exception {
8 String fname = "Main.java";
9 String[] sa = { "class", "package", "import" }; // string array
10 List<String> sl = Arrays.asList(sa); // string list
11 Scanner sc = new Scanner(new File(fname));
12 sc.useDelimiter("[^\w.*\"]+|\"[^\"]*\"");
13 while (sc.hasNext()) {
14 String s = sc.next();
15 if (sl.contains(s)) System.out.println(s + " : " + sc.next());
16 }
17 }
18}