2016-11-22 4 views
0

私は、HTMLタグをフィルタリングし、練習用の有効なタグの内容のみを出力する正規表現パターンを作成しています。パターン自体は一致するタグのように見えますが、印刷する際に問題が発生しています。改行を除外する文が、改行をフィルタリングしない場合。

import java.io.*; 
import java.util.*; 
import java.text.*; 
import java.math.*; 
import java.util.regex.*; 

public class HTMLPattern{ 
    public static void main(String[] args){ 

     Scanner in = new Scanner(System.in); 
     int testCases = Integer.parseInt(in.nextLine()); 

     while(testCases>0){ 
      String line = in.nextLine(); 
      String tagPattern = "<([^>]+)>([^<]*?)</\\1>"; 
      Pattern p = Pattern.compile(tagPattern, Pattern.MULTILINE); 
      Matcher m = p.matcher(line); 
      if(m.find()){ 
       //checks if the output equals a newline 
       if(m.group(2).matches("[\\n\\r]+")){ 
        System.out.println("None");  
       }else{ 
        System.out.println(m.group(2)); 
       } 
      }else{ 
       System.out.println("None"); 
      } 
     testCases--; 
     } 
    } 
} 

入力:

3 
<a>test</a> 
<b></b> 
<c>test</c> 

を私の出力する必要があります:

test 
None 
test 

しかし代わりそれは次のとおりです。

test 

test 

私の質問は:なぜ私のif文が改行をキャッチして "None"を印刷しないのですか?新しい行はありません

+0

if(m.group(2) == null)をチェックするための私の以前の試みは失敗したものの、.isEmpty()方法は正しく私がテストしていたNULL値と一致しました。探している出力を印刷する場合は空のノード値をテストする必要があります – usha

+0

@Vimsha Hmm。以前のnull値のチェックに失敗したため、改行とみなしました。 – user2533660

+0

@Vimsha Nvm、私はそれを理解しました。私はちょっと質問に答えます。 – user2533660

答えて

2

、ちょうど空の文字列があり、このように空の文字列を一致させよう:

if (m.group(2).matches("^$")) { 

または文字列のlengthを確認してください。

if (m.group(2).length() == 0) { 
0

が判明何の改行がありませんifステートメント内に存在します。私は ``で改行文字を見ていないです

if(m.find()){ 
    if(m.group(2).isEmpty()){ 
     System.out.println("None");  
     }else{ 
     System.out.println(m.group(2)); 
     } 
    }else{ 
     System.out.println("None"); 
    } 
関連する問題