実現したいこと
userIdArrayにあるID(ASD1234,asdfgh1,aSd1234,asd1223,mmm1234,1234ASD)を正規表現でチェックし、OKリストとNGリストに振り分けたいです。
【チェック内容】
・1~3文字目は大文字半角英字→OKリストへ
・4~7文字目は半角数字→OKリストへ
・7文字以上→OKリストへ
・その他→NGリストへ
↓のような出力内容にしたいです。(IDの出力順序は問いません)
OKリスト---------------
・ASD1234
NGリスト---------------
・asdfgh1
・aSd1234
・asd1223
・mmm1234
・1234ASD
発生している問題・分からないこと
【for文とif文を使ったver】と【配列をArrayListに変換し、最後にリストを取り出す形のver】を書いてみたのですが、どちらも引数に適用できないという下記のエラーメッセージが出てきてしまいます。
エラーメッセージ
error
1【for文とif文を使ったver】 2Exception in thread "main" java.lang.Error: Unresolved compilation problems: 3 型 Pattern のメソッド matcher(CharSequence) は引数 (int) に適用できません 4 型 Pattern のメソッド matcher(CharSequence) は引数 (int) に適用できません 5 型 List<String> のメソッド add(int, String) は引数 (int) に適用できません 6 型 List<String> のメソッド add(int, String) は引数 (int) に適用できません 7 8 at Main.main(Main.java:14) 9 10【配列をArrayListに変換し、最後にリストを取り出す形のver】 11Exception in thread "main" java.lang.Error: Unresolved compilation problems: 12 型 Pattern のメソッド matcher(CharSequence) は引数 (int) に適用できません 13 型 Pattern のメソッド matcher(CharSequence) は引数 (int) に適用できません 14 型 List<String> のメソッド add(int, String) は引数 (int) に適用できません 15 型 List<String> のメソッド add(int, String) は引数 (int) に適用できません 16 17 at Main.main(Main.java:14) 18
該当のソースコード
//for文とif文を使ったver import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { String[] userIdArray = {"ASD1234","asdfgh1","aSd1234","asd1223","mmm1234","1234ASD"}; List<String> okList= new ArrayList<>(); List<String> ngList = new ArrayList<>(); for(int i = 0; i<userIdArray.length; i++){ //配列繰り返し Pattern p1 = Pattern.compile("^[A-Z]{3}"); //1~3文字目は大文字半角英字を設定する Matcher m1 = p1.matcher(i); Pattern p2 = Pattern.compile("[0-9]{4-7}"); //4~7文字目は半角数字を設定する Matcher m2 = p2.matcher(i); if(m1.find() && m2.find() && userIdArray.length >=7){ //7文字以上はOK okList.add(i); }else{ ngList.add(i); } System.out.println("OKリスト---------"); for(int i1 = 0; i1<okList.size(); i1++){ System.out.println(okList.get(i1)); } System.out.println("NGリスト---------"); for(int i1 = 0; i1<ngList.size(); i1++){ System.out.println(ngList.get(i1)); } } } }
//配列をArrayListに変換し、最後にリストを取り出す形のver import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Main{ public static void main(String[] args) { String[] userIdArray = {"ASD1234","asdfgh1","aSd1234","asd1223","mmm1234","1234ASD"}; ArrayList<String> idList = new ArrayList<String>(Arrays.asList(userIdArray)); //配列からリストに変換 System.out.println("チェックOKリスト-------------"); List<String> okList = idList.stream() //リストとして取り出す .filter("^[A-Z]{3}","[0-9]{4-7}") .collect(Collectors.toList()); System.out.println("チェックNGリスト-------------"); List<String> ngList = idList.stream() .filter(idList.size()<=7) .filter("^[?!.*A-Z]{3}.*","[?!.*0-9]{4-7}.*") .collect(Collectors.toList()); } }
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
【for文とif文を使ったver】で、最初はif()の中に直接正規表現を書いていたのですが、patternとmatchでチェックするという記載が出てきたので、使いました。
補足
【for文とif文を使ったver】【配列をArrayListに変換し、最後にリストを取り出す形のver】片方だけの回答でも助かります。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー