javaの正規表現について質問します。
任意の文字列に対して文字列チェックを行いたいです。
チェックの内容としては、任意の文字列の中に指定する
文字列が入っているかのチェックです。
チェックの内容は下記の通りです。
指定する文字がそのまま含まれるか、指定文字の間に1文字だけ異なる文字が含まれる場合はOK。
2文字以上異なる文字が間に入ればNG。
例:指定文字→apple
任意の文字→①djsapplesdf(OK,appleの間に0文字)
②klfappolekkk(OK,appleの間に1文字)
③lroapewplejg(NG,appleの間に2文字)
正規表現を使ってfind()を使ってチェックすると、下記入力値の場合に
trueを返してきますが、なぜfalseにならないのでしょうか。
<trueになってしまうパターン>
指定文字(正規表現)→.ma.iza.
任意の文字→maxizya
java
1コード 2import java.util.*; 3import java.util.regex.Pattern; 4import java.util.regex.Matcher; 5 6public class Main { 7 public static Scanner sc = new Scanner(System.in); 8 public static int TicketCount = sc.nextInt(); 9 public static String SearchWord = sc.next(); 10 public static int SearchLength = SearchWord.length(); 11 public static void main(String[] args) { 12 String word = ""; 13 int offset = 0; 14 for(int n = 0; n < TicketCount; n++){ 15 String TicketWord = sc.next(); 16 for(int i = 1; i < SearchLength; i++){ 17 word = fncMakeRegex(i); 18 String regex = ".*" + word + "*."; 19 Pattern p = Pattern.compile(regex); 20 Matcher m = p.matcher(TicketWord); 21 22 if(m.find()){ 23 System.out.println("含まれる"); 24 } else { 25 System.out.println("含まれない"); 26 } 27 } 28 } 29 } 30 31 public static String fncMakeRegex(int offset){ 32 StringBuilder sb = new StringBuilder(); 33 sb.append(SearchWord); 34 sb.insert(offset, "."); 35 String str = new String(sb); 36 return str; 37 } 38}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/13 01:51
2019/07/13 03:53
2019/07/13 04:06
2019/07/14 15:29