2017-08-11 167 views
0

輸入文本的文本文件的內容具有內容如下:驗證使用正則表達式

TIMINCY ........許多任意字符含。空格和製表符

細節........許多任意字符incl。空格和製表符

細節........許多任意字符incl。空格和製表符

細節........許多任意字符incl。空格和製表符

。 (任何數量的行包含DETAILS)

TIMINCY ........許多任意字符incl。空格和製表符

細節........許多任意字符incl。空格和製表符

細節........許多任意字符incl。空格和製表符

細節........許多任意字符incl。空格和製表符

(等等)

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」 + 「[] \\ {* \\}」 + 「」 +「[ 「+」 詳情 「+」 \\ {* \\} 「+」[。]; 「+」] 「+」 \\ {* \\} 「+」] 「+」 \\ {* \\}; 「;而且,錯過了提到以下內容:private static final String 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.]+" - 在這裏你把允許的字符發生一次或多次

參考:Oracle Documentation

0

你可以試着一行行,當你遍歷線

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(); 
} 

另外:Matcher.matches()返回true,如果整個字符串的正則表達式匹配,我會建議使用Matcher.find()來找到你的模式不想要。

Matcher (Java 7)