2017-08-11 8 views
0

入力テキストファイルの内容は、次のとおりです。正規表現を使用してテキストファイルの内容を検証する

TIMINCY ........多くの任意の文字が含まれています。空白とタブ

詳細........多くの任意の文字を含む。空白とタブ

詳細........多くの任意の文字を含む。空白とタブ

詳細........多くの任意の文字を含む。空白およびタブ

。 (DETAILSを含む任意の数の行)

TIMINCY ........多くの任意の文字を含む。空白とタブ

詳細........多くの任意の文字を含む。空白とタブ

詳細........多くの任意の文字を含む。空白とタブ

詳細........多くの任意の文字を含む。空白およびタブ

(その上で)

Q:私は、ファイルの内容は、上記のパターンに対してに従い されていない場合、私はCustomExceptionを投げることができるように正規表現を使用してファイルを検証する必要があります。

お手伝いができるかどうかお知らせください。どんな助けでも心から感謝しています。

String patternString = "TMINCY"+"[.]\\{*\\}"+";"+"["+"DETAILS"+"[.]\\{*\\}"+";"+"]"+"\\{*\\}"+"]"+"\\{*\\};"; 
Pattern pattern = Pattern.compile(patternString); 
     String messageString = null; 
StringBuilder builder = new StringBuilder(); 
     try (BufferedReader reader = Files.newBufferedReader(curracFile.toPath(), charset)) { 
      String line; 
      while ((line = reader.readLine()) != null) { 
       builder.append(line); 
       builder.append(NEWLINE_CHAR_SEQUENCE); 
      } 

      messageString = builder.toString(); 

     } catch (IOException ex) { 
      LOGGER.error(FILE_CREATION_ERROR, ex.getCause()); 
      throw new BusinessConversionException(FILE_CREATION_ERROR, ex); 
     } 
     System.out.println("messageString is::"+messageString); 
     return pattern.matcher(messageString).matches(); 

ただし、正しいファイルの場合はFALSEを返します。正規表現で私を助けてください。

+0

* CORRECTION ::私が使用しているパターンがある:文字列patternString = "[" + "TMINCY" + "[] \\ {*} \\。" + ";" + "[ "+"詳細 "+" [。] \\ {* \\} "+"; "+"] "+" \\ {* \\} "+"] "+" \\ {* \\}; ";また、次の言及に欠場:プライベート静的最終的な文字列NEWLINE_CHAR_SEQUENCE = ";"; – saiD

+1

コメントを書く代わりに投稿を編集してください。本当にREGEXを使用する必要がありますか?ループで行単位で読むだけではどうですか? – jeanr

+0

必須:https://xkcd.com/1171/ – jdv

答えて

0

"^(TIMINCY|DETAIL)[\.]+[a-zA-z\s.]+"

"^"のようなものはどう - ライン
"(TIMINCY|DETAIL)"の開始と一致する - TIMINCYまたは詳細
"[\.]"と一致する - 一回以上
"[a-zA-z\s.]+"を発生するようにドット文字に一致する - ここでは入れ許可された文字は1回以上発生する。

参照:Oracle Documentation

あなたが行も

Pattern p = Pattern.compile("^(?:TIMINCY|DETAILS)[.]{8}.*"); 
//Explanation: 
//^: Matches the begining of the string. 
// (?:): non capturing group. 
// [.]{8}: Matches a dot (".") eight times in a row. 
// .*: Matches everything until the end of the string 
// | : Regex OR operator 

String line = reader.readLine() 
Matcher m; 
while (line != null) { 
    m = p.matcher(line); 
    if(!m.matches(line)) 
     throw new CustomException("Not valid"); 
    builder.append(line); 
    builder.append(NEWLINE_CHAR_SEQUENCE); 
    line = reader.readLine(); 
} 

を反復処理しているとき

0

あなたは行ずつ試みることができる:文字列全体があなたの正規表現に一致した場合Matcher.matches() trueを返し、私はMatcher.findを使用することをお勧めします()パターンを見つけるためにあなたほしくない。

Matcher (Java 7)

関連する問題