java - 附加到文件时,如果条件总是失败

标签 java string file

输入:

 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/

相关文章:

java - Apache 詹姆斯 : Get notify once delivery or bounce

java - 从 Java 调用 SQL Server 2008 存储过程

java - 在数组列表中存储对象

string - SetString是否有相应的AnsiString和UnicodeString两个版本?

python - python中的文件路径

python - 将非文本文件读入 Python

java - 如何确定一个对象是整数还是字符串还是 boolean 值?

javascript - 如何在子字符串 B 的第一个实例之前找到子字符串 A 的最后一个实例?

javascript - 将表解析为正则表达式方法

macos - 检测文件/文件夹的删除和添加 cocoa