输入:
bank_details
payee
online_system_id
transaction_id
pass_num
prev_tran_approved
bank_details
payee
online_system_id
transaction_id
prev_tran_approved
以下代码的实际输出。
bank_details
payee
online_system_id
transaction_id
pass_num
prev_tran_approved
online_system_id
proc_online_system_id
tran_reversed
prev_tran_approved
bank_details
payee
online_system_id
transaction_id
prev_tran_approved
online_system_id
proc_online_system_id
tran_reversed
prev_tran_approved
预期输出:
bank_details
payee
online_system_id
transaction_id
pass_num
prev_tran_approved
proc_online_system_id
tran_reversed
bank_details
payee
online_system_id
transaction_id
prev_tran_approved
proc_online_system_id
tran_reversed
下面给出的代码仅供引用。 即使文件中不存在字符串,我检查文件中现有字符串的 if 条件也始终返回 true。请仔细检查代码并建议我进行更改。
逻辑是我们必须读取一个包含各个行的文件,其中每个记录都以空行分隔。取决于我在 if block 中提到的条件,即字符串 online_system_id 是否已存在于文件中我们不会附加它,如果它不存在,那么我们会将它附加到每个记录 block 的末尾。此检查将对 4 个值执行,即 online_system_id、proc_online_system_id、tran_reversed、prev_tran_approved
String line;
File output = new File(outputDir, "post_tran.tbl");
PrintStream out = new PrintStream(new FileOutputStream(output));
BufferedReader br = new BufferedReader(new FileReader(inputFile));
while((line=br.readLine())!=null){
if(line.trim().isEmpty()) {
if(!(line.contains("online_system_id"))){
out.println("online_system_id");
}
if(!(line.contains("proc_online_system_id"))){
out.println("proc_online_system_id");
}
if(!(line.contains("tran_reversed"))){
out.println("tran_reversed");
}
if(!(line.contains("prev_tran_approved"))){
out.println("prev_tran_approved");
}
}
out2.println(line); //always print the current line
}
try{
out2.close();
br.close();
} catch (Exception ex) {
System.err.println(ex);
}
最佳答案
编辑:
解释完你的逻辑后,看起来你需要跟踪当前记录中出现的 4 个特殊字符串中的哪一个,并在记录结束时添加其中没有出现的字符串。您可以使用 4 个 boolean 变量来完成。
boolean osi = false;
boolean posi = false;
boolean tr = false;
boolean pta = false;
while((line=br.readLine())!=null){
if(line.trim().isEmpty()) {
// end of record, print each of the 4 special Strings that didn't appear
if(!osi){
out.println("online_system_id");
}
if(!posi){
out.println("proc_online_system_id");
}
if(!tr){
out.println("tran_reversed");
}
if(!pta){
out.println("prev_tran_approved");
}
osi = false;
posi = false;
tr = false;
pta = false;
} else {
// track appearance of the 4 special Strings
if(line.contains("online_system_id")){
osi = true;
}
if(line.contains("proc_online_system_id")){
posi = true;
}
if(line.contains("tran_reversed")){
tr = true;
}
if(line.contains("prev_tran_approved")){
pta = true;
}
}
out.println(line); //always print the current line
}
关于java - 附加到文件时,如果条件总是失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30799826/