【问题标题】:While appending to file if condition always fails如果条件总是失败,则附加到文件
【发布时间】:2015-06-12 09:34:16
【问题描述】:

输入:

 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 块中提到的条件,即文件中是否已经存在字符串 online_system_id我们不会附加它,如果它不存在,那么我们会将它附加到每个记录块的末尾。将对 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);
      }

【问题讨论】:

  • 请贴出实际输出

标签: java string file


【解决方案1】:

编辑:

在解释了您的逻辑之后,您似乎需要跟踪 4 个特殊字符串中的哪一个出现在当前记录中,并在记录结束时添加其中没有出现的任何一个。您可以使用 4 个布尔变量来完成。

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
}

【讨论】:

  • 这给出了不同的答案。
  • @user3678383 想要的逻辑是什么?
  • @user3678383 根据您的输入和输出示例编辑了答案。
  • @Eran Well 没必要。输入可以是任意顺序
  • @user3678383 在这种情况下,您应该解释生成输出的逻辑,而不是只显示一个输入和输出示例。
【解决方案2】:

改变

if(line.trim().isEmpty()) 

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");
            }  

【讨论】:

  • 它给出了完全不同的答案
  • 你最后试过了吗?
  • 我猜你没有得到我的问题。
  • 我不知道你期望得到什么
  • 请浏览输入输出文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
  • 2021-08-03
  • 1970-01-01
  • 2014-02-04
相关资源
最近更新 更多