如何在文本文件中使用条件语句或包含方法?
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.
通过包含或通过正则表达式匹配查找文本。
替换也可以。
replace
、replaceFirst
和replaceAll
方法return无法替换的原始字符串。
正则表达式 (?s)
让 .
(=任何字符)也匹配换行符。
我有一个 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.
通过包含或通过正则表达式匹配查找文本。 替换也可以。
replace
、replaceFirst
和replaceAll
方法return无法替换的原始字符串。
正则表达式 (?s)
让 .
(=任何字符)也匹配换行符。