如何在文本文件中使用条件语句或包含方法?

How to use conditional statement or contains method in a text file?

我有一个 java 程序可以读取多个文件并相应地替换值。但是,我正在努力为其应用条件并仅在满足特定条件时才应用更改。例如,如果文件包含此特定字符“:20:”,则应用更改,否则保持文本文件不变。 这里的问题是,因为我没有要查找的字段来相应地应用条件,所以我不知道如何将这些应用于仅包含以下数据的文本文件:(12345555555) 233344 100 :20:aaa .

我还查看了使用 contains() 方法查看文件以找到我想要的值然后应用更改但无法使其工作。

public class TextFm 
{
    public static void main(String[] args)
    {
        File folder = new File("C:\tmp");
        File[] listOfFiles = folder.listFiles();
        for(File file : listOfFiles) 
        {
            replaceText(file);
        }
    }

    public static void replaceText(File file) 
    {

        try 
        {
            BufferedReader reader = new BufferedReader(new FileReader(file));

            String line = "", oldtext = "";
            while ((line = reader.readLine()) != null) 
            {

                oldtext = oldtext + line + System.lineSeparator();
            }
            reader.close();


            String replacedtext = oldtext.replaceAll("100", "200");


            FileWriter writer = new FileWriter(file);
            writer.write(replacedtext);

            writer.close();

            System.out.println("Done");

        } catch (IOException ioe) 

        {
            ioe.printStackTrace();
        }
    }
}

在这种情况下使用contains() 方法可以正常工作。你可以这样做:

String line = "", oldtext = "";
while ((line = reader.readLine()) != null) 
{

   oldtext = oldtext + line + System.lineSeparator();
}
reader.close();

if(oldtext.contains(":20:")) {
    String replacedtext = oldtext.replaceAll("100", "200");

    FileWriter writer = new FileWriter(file);
    writer.write(replacedtext);

    writer.close();

    System.out.println("Done");
}
    public static void replaceText(File file) 
    {
        try 
        {
            Charset charset = Charsets.defaulCharset();
            String oldText = new String(Files.readAllBytes(file.toPath()),
                                        charset);

            if (!oldText.contains(":20")) {
                return;
            }
            if (!oldText.matches("(?s).*you (idiot|unspeakable).*")) {
                return;
            }
            String replacedtext = oldtext.replace("100", "200");
            replacedtext = replacedtext .replaceAll("\d", "X"); // Digit X-ed out

            if (!replacedText.equals(oldText)) {
                Files.write(file.toPath(), replacedText.getBytes(charset));
            }
            System.out.println("Done");
        } catch (IOException ioe) 
        {
            ioe.printStackTrace();
        }
    }

为了速度,不应该用字符串和+收集文件内容。最好使用 StringBuilder 或非常好的 Files class.

通过包含或通过正则表达式匹配查找文本。 替换也可以。

replacereplaceFirstreplaceAll方法return无法替换的原始字符串。

正则表达式 (?s).(=任何字符)也匹配换行符。