java - 应该过滤掉换行符的 if 语句不过滤换行符。

标签 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 语句没有捕获换行符并打印“None”?

最佳答案

没有新行,只有空字符串,尝试像这样匹配空字符串:

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

或者检查字符串的长度:

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

关于java - 应该过滤掉换行符的 if 语句不过滤换行符。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40749353/

相关文章:

c - 为什么这段代码会打印两次?

c# - 如何以编程方式将换行符添加到 TFS 工作项文本框?

java 找不到或无法加载主类

java - 变量类型不兼容的问题

javascript - 我对 .splice() 做错了什么

vba - vba基于大量可比对象的if语句,有什么更聪明的方法吗?

php - Textarea 的换行符是什么?

java - 我想从 ListView 中删除一个项目

java - 当我们将参数传递给方法时会发生什么操作?

读取文本文件时的 Java 定界符 - 正则表达式/或不是?