用正则表达式设置布尔值?

时间:2015-02-10 12:52:49

标签: java regex

我使用BufferedReader逐行读取文本文件。 我有一系列三个正则表达式来测试numberscapitalsspecial chars的每一行。

如果其中任何一个匹配,我将boolean设置为true。 我想稍后使用这些布尔值向用户输出一条消息,告诉他们“扫描”的结果。

然而,当我来使用布尔值时,尽管我在测试文本文件中添加了数字,大写等,但它们仍被设置为假。

如果文本文件中的某一行是abC 6,那么numBoolcapBool应该返回true,而不是specialBool

import java.io.*;
import java.util.*;
import java.lang.*;
import java.awt.*;

class ReadFile implements Runnable
{
    public void run() 
    {
        String line; 
        Boolean capBool = false;
        Boolean numBool = false;
        Boolean specialBool = false;

        try
        {
            /* ------------- Get Filename ------------- */
            System.out.print("Enter file to scan : ");
            BufferedReader fileGet = new BufferedReader(new InputStreamReader(System.in));
            String file_name = fileGet.readLine();
            fileGet.close();

            /* ---------------- Open File ---------- */
            BufferedReader br = new BufferedReader(new FileReader(file_name));

            /* --------------- Scan file line by line ----------- */
            while((line = br.readLine()) != null)
            {
                if(line.matches("[A-Z]"))
                    capBool = true;
                if(line.matches("[0-9]"))
                    numBool = true;
                if(line.matches("[$&+,:;=?@#|]"))
                    specialBool = true;

                System.out.println(line);
            }

            br.close(); // close reader

            DisplayResults display = new DisplayResults();
            String findings = display.displayFindings(capBool, numBool, specialBool);

            System.out.print(findings);
        }
        catch(IOException ex)
        {
            System.out.println(ex.getMessage() + " - Please check log file for more details");
            ex.printStackTrace();
        }

    }

    public static void main(String[] args) throws FileNotFoundException
    {
        System.setErr(new PrintStream(new FileOutputStream("Exceptions.txt")));
        Runnable r = new ReadFile();
        Thread th = new Thread(r);
        th.start();
    }
}

这是因为当我退出while循环时,以某种方式覆盖了布尔值吗?或者,由于正则表达式方法错误,它们是否永远不会被设置为真?

1 个答案:

答案 0 :(得分:1)

matches表示它的样子 - 检查整个字符串是否与正则表达式匹配。然而,从您编写这些正则表达式的方式来看,这并不是您最想要的 - 您似乎正在寻找的是一种regexy contains

然而,令人遗憾的是,没有其他漂亮的语法可以做你想做的事 - 请参阅How to use regex in String.contains() method in Java。你需要重写你的正则表达式。

它不应该那么难。只需使用.*包围您准备好的表达式,即表示您要查找的内容可以在任意数量的字符之前或之后显示 - 即[A-Z]可以更改为.*[A-Z].*