Java 如何在文本文件中使用条件语句或contains方法?
我有一个java程序,可以读取多个文件并相应地替换值。然而,我正在努力为它应用一个条件,并且仅当满足某个条件时才应用更改。例如,如果文件包含此特定字符“:20:”,则应用更改,否则保持文本文件不变。 这里的问题是,因为我没有字段来寻找相应的应用条件,所以我不知道如何将这些字段应用于这样一个文本文件,它只包含如下数据:(123455555)233344 100:20:aaa 我还研究了如何使用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
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();
}
}