簡體   English   中英

使用正則表達式設置布爾值?

[英]Setting Booleans with Regex?

我正在使用BufferedReader逐行讀取文本文件。 我有一系列三個正則表達式來測試每一行的numberscapitalsspecial chars

如果其中任何一個匹配,我將boolean設置為true。 我想稍后使用這些布爾值向用戶輸出一條消息,告訴他們“掃描”的發現。

但是,當我開始使用布爾值時,盡管我在測試文本文件中添加了數字,大寫字母等,但它們仍然都設置為false。

如果文本文件中有一行,說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循環時,布爾值被某種方式覆蓋了嗎? 還是因為正則表達式方法錯誤而使它們永遠不會設置為true?

matches表示它看起來像什么-檢查整個字符串是否與您的正則表達式匹配。 但是,從編寫這些正則表達式的方式來看,這並不是您最想要的-您似乎正在尋找的是一種正則表達式contains

可悲的是,沒有其他漂亮的語法可以執行所需的操作-請參閱如何在Java的String.contains()方法中使用正則表達式 您需要去重寫您的正則表達式。

而且不應該那么難。 只需用.*包圍您的現成表達式即可表明您要查找的內容可以在前面或后面帶有任意數量的字符-即[AZ]可以更改為.*[AZ].*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM