我有一个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();
}
}
}
答案 0 :(得分:0)
在这种情况下,使用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");
}
答案 1 :(得分:0)
.navcontainer{
padding: 1rem;
display: flex;
justify-content: space-between;
align-items: center;
position: fixed;
width: 100%;
z-index: 1;
transition: background-color .2s ease-in-out;
}
对于速度,不应该使用String和+来收集文件内容。最好使用 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
,replace
和replaceFirst
方法会返回原始字符串。
正则表达式replaceAll
允许(?s)
(=任何字符)也匹配换行符。