Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在文本文件中使用条件语句或contains方法?_Java_If Statement_While Loop_Contains - Fatal编程技术网

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

Java 如何在文本文件中使用条件语句或contains方法?,java,if-statement,while-loop,contains,Java,If Statement,While Loop,Contains,我有一个java程序,可以读取多个文件并相应地替换值。然而,我正在努力为它应用一个条件,并且仅当满足某个条件时才应用更改。例如,如果文件包含此特定字符“:20:”,则应用更改,否则保持文本文件不变。 这里的问题是,因为我没有字段来寻找相应的应用条件,所以我不知道如何将这些字段应用于这样一个文本文件,它只包含如下数据:(123455555)233344 100:20:aaa 我还研究了如何使用contains()方法查找文件,以找到所需的值,然后应用更改,但无法使其正常工作 public clas

我有一个java程序,可以读取多个文件并相应地替换值。然而,我正在努力为它应用一个条件,并且仅当满足某个条件时才应用更改。例如,如果文件包含此特定字符“:20:”,则应用更改,否则保持文本文件不变。 这里的问题是,因为我没有字段来寻找相应的应用条件,所以我不知道如何将这些字段应用于这样一个文本文件,它只包含如下数据:(123455555)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");
}
为了提高速度,不应使用字符串和+来收集文件内容。最好使用
StringBuilder
,或者非常好的
文件

查找文本可以通过包含或正则表达式匹配进行。 更换也可以由任何一方完成

replace
replaceFirst
replaceAll
方法在无法替换任何内容时返回原始字符串


Regex
(?s)
允许
(=any char)也匹配换行符。

非常感谢这些有价值的信息,但是我使用了contains方法,这对我来说很好。另外,我将来会使用StringBuilder,但在本例中不会。
    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();
        }
    }