回答編集履歴
3
stream 版追加
test
CHANGED
@@ -49,3 +49,30 @@
|
|
49
49
|
NGリスト---------
|
50
50
|
[asdfgh1, aSd1234, asd1223, mmm1234, 1234ASD]
|
51
51
|
```
|
52
|
+
|
53
|
+
---
|
54
|
+
【配列をArrayListに変換… ver】改め stream 版では、 ok/ng を true/false としてキーにする Map に集めるようにすることで、stream から二度集めたり二つの正規表現を扱う必要を無くします。
|
55
|
+
```java
|
56
|
+
import java.util.*;
|
57
|
+
import java.util.regex.*;
|
58
|
+
import java.util.stream.*;
|
59
|
+
|
60
|
+
public class Main {
|
61
|
+
public static void main(String[] args) {
|
62
|
+
String[] userIdArray = { "ASD1234", "asdfgh1", "aSd1234", "asd1223", "mmm1234", "1234ASD" };
|
63
|
+
|
64
|
+
Pattern p = Pattern.compile("[A-Z]{3}[0-9]{4}.*");
|
65
|
+
|
66
|
+
Map<Boolean,List<String>> map =
|
67
|
+
Arrays.stream(userIdArray).collect(Collectors.groupingBy(
|
68
|
+
userId -> p.matcher(userId).matches() // ok なら true, ng なら false
|
69
|
+
));
|
70
|
+
|
71
|
+
System.out.println("OKリスト---------");
|
72
|
+
System.out.println(map.get(true));
|
73
|
+
|
74
|
+
System.out.println("NGリスト---------");
|
75
|
+
System.out.println(map.get(false));
|
76
|
+
}
|
77
|
+
}
|
78
|
+
```
|
2
修正
test
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
のように渡さなければなりません。
|
14
14
|
|
15
|
-
また、 Pattern はループの中で何度もしなければならないようなことではありませんし、 Pattern を二つに分ける必要も無さそうですし、ok/ngListの表示も振り分けてからでよいのではありませんか?
|
15
|
+
また、 Pattern.compile はループの中で何度もしなければならないようなことではありませんし、 Pattern を二つに分ける必要も無さそうですし、ok/ngListの表示も振り分けてからでよいのではありませんか?
|
16
16
|
|
17
17
|
```java
|
18
18
|
import java.util.*;
|
1
リンク・コード等追加
test
CHANGED
@@ -3,10 +3,49 @@
|
|
3
3
|
|
4
4
|
メッセージをきちんと読まれていないようです。
|
5
5
|
matcher には対象となる文字列(CharSequence)を指定しなければならないのに i を渡しているのでダメだと言われています。
|
6
|
+
|
7
|
+
[public Matcher matcher(CharSequence input)](https://docs.oracle.com/javase/jp/8/docs/api/java/util/regex/Pattern.html#matcher-java.lang.CharSequence-)
|
8
|
+
|
6
9
|
たとえば、
|
7
10
|
|
8
11
|
Matcher m1 = p1.matcher(userIdArray[i]);
|
9
12
|
|
10
13
|
のように渡さなければなりません。
|
11
14
|
|
12
|
-
また、 Pattern はループの中で何度もしなければならないようなことではありませんし、
|
15
|
+
また、 Pattern はループの中で何度もしなければならないようなことではありませんし、 Pattern を二つに分ける必要も無さそうですし、ok/ngListの表示も振り分けてからでよいのではありませんか?
|
16
|
+
|
17
|
+
```java
|
18
|
+
import java.util.*;
|
19
|
+
import java.util.regex.*;
|
20
|
+
|
21
|
+
public class Main {
|
22
|
+
public static void main(String[] args) {
|
23
|
+
String[] userIdArray = { "ASD1234", "asdfgh1", "aSd1234", "asd1223", "mmm1234", "1234ASD" };
|
24
|
+
|
25
|
+
List<String> okList = new ArrayList<>();
|
26
|
+
List<String> ngList = new ArrayList<>();
|
27
|
+
|
28
|
+
Pattern p = Pattern.compile("[A-Z]{3}[0-9]{4}.*");
|
29
|
+
|
30
|
+
for(String userId : userIdArray) {
|
31
|
+
if(p.matcher(userId).matches()) {
|
32
|
+
okList.add(userId);
|
33
|
+
} else {
|
34
|
+
ngList.add(userId);
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
System.out.println("OKリスト---------");
|
39
|
+
System.out.println(okList);
|
40
|
+
|
41
|
+
System.out.println("NGリスト---------");
|
42
|
+
System.out.println(ngList);
|
43
|
+
}
|
44
|
+
}
|
45
|
+
```
|
46
|
+
```
|
47
|
+
OKリスト---------
|
48
|
+
[ASD1234]
|
49
|
+
NGリスト---------
|
50
|
+
[asdfgh1, aSd1234, asd1223, mmm1234, 1234ASD]
|
51
|
+
```
|