teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2021/11/12 06:03

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -27,4 +27,28 @@
27
27
  }
28
28
  }
29
29
  ```
30
- コメントの中に class や import などがあると誤認識します。
30
+ コメントの中に class や import などがあると誤認識します。
31
+
32
+ **追記**
33
+ import で名前に `*` を含めるため、useDelimiter の引数を変更しました。また、
34
+ 見つかった名前を ArrayList にため込まず、その場で表示するようにしました。
35
+ ```java
36
+ //package abc.def.ghi
37
+
38
+ import java.util.*; // List, Arrays, Scanner
39
+ import java.io.File;
40
+
41
+ public class Main {
42
+ public static void main(String[] args) throws Exception {
43
+ String fname = "Main.java";
44
+ String[] sa = { "class", "package", "import" }; // string array
45
+ List<String> sl = Arrays.asList(sa); // string list
46
+ Scanner sc = new Scanner(new File(fname));
47
+ sc.useDelimiter("[^\w.*\"]+|\"[^\"]*\"");
48
+ while (sc.hasNext()) {
49
+ String s = sc.next();
50
+ if (sl.contains(s)) System.out.println(s + " : " + sc.next());
51
+ }
52
+ }
53
+ }
54
+ ```

1

コードの修正

2021/11/12 06:03

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -8,7 +8,7 @@
8
8
  public static void main(String[] args) throws Exception {
9
9
  String fname = "Main.java";
10
10
  Scanner sc = new Scanner(new File(fname));
11
- sc.useDelimiter("([^\w\.\"]+)|(\"[^\"]*\")");
11
+ sc.useDelimiter("[^\w\.\"]+|\"[^\"]*\"");
12
12
  ArrayList<String> c_name = new ArrayList<>();
13
13
  ArrayList<String> p_name = new ArrayList<>();
14
14
  ArrayList<String> i_name = new ArrayList<>();