如果语句应该过滤掉换行而不过滤新行。

时间:2016-11-22 18:43:00

标签: java if-statement newline

我正在编写一个正则表达式模式,用于过滤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语句没有捕获换行符并打印“无”?

2 个答案:

答案 0 :(得分:2)

没有新行,只有空字符串,尝试匹配空字符串,如下所示:

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

或检查字符串的length

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

答案 1 :(得分:0)

事实证明,if语句中没有换行符。虽然我之前检查if(m.group(2) == null)的尝试失败了,但.isEmpty()方法正确匹配了我测试的空值:

if(m.find()){
   if(m.group(2).isEmpty()){
      System.out.println("None");     
      }else{
         System.out.println(m.group(2));
      }
   }else{
      System.out.println("None");
   }