【问题标题】:If Variable doesn't exist replace with 0如果变量不存在替换为 0
【发布时间】:2018-12-01 13:45:58
【问题描述】:

我正在使用屏幕抓取工具来提取数据并输出到 CSV。除非会话变量不存在,否则它可以完美运行。我想改变我的代码说,如果这个变量不存在,用值 0 替换。

例如如果 Session.getVariable "Figure2" 不存在,则使用值 0。

session.log( "Writing data to a file." ); 

out = new FileWriter( "C:/Users/Documents/Live/data.CSV" );
out.write ("User, Figure 1,Figure 2, Figure 3, Figure 4 ");
out.write ("\n");
out.write ( "User" ) ;
out.write (",");
out.write ( session.getVariable( "Figure1" ) );
out.write (",");
out.write ( session.getVariable( "Figure2" ) );
out.write (",");
out.write ( session.getVariable( "Figure3" ) );
out.write (",");
out.write ( session.getVariable( "Figure4" ) );
out.close();

session.log( "Writing data to a file." ); 

【问题讨论】:

    标签: java screen-scraping


    【解决方案1】:

    您可以使用包含此逻辑的简单方法包装变量提取:

    private static String variableOrZero(String variable) {
        String retVal = session.getVaraible(variable);
        if (retVal == null) {
            retVal = "0";
        }
        return retVal;
    }
    

    然后在你的代码中使用它:

    out = new FileWriter( "C:/Users/Documents/Live/data.CSV" );
    out.write ("User, Figure 1,Figure 2, Figure 3, Figure 4 ");
    out.write ("\n");
    out.write ( "User" ) ;
    out.write (",");
    out.write ( variableOrZero( "Figure1" ) );
    out.write (",");
    out.write ( variableOrZero( "Figure2" ) );
    out.write (",");
    out.write ( variableOrZero( "Figure3" ) );
    out.write (",");
    out.write ( variableOrZero( "Figure4" ) );
    out.close();
    

    【讨论】:

    • 如果使用 Java 8 或更高版本,也可以使用java.util.Optional 完成,例如像这样optional.ofNullable(session.getVariable(variable)).orElse("0");
    【解决方案2】:

    我的解决方案是使用三元运算符Another stackoverflow link for ternary operator discussion

    session.log( "Writing data to a file." ); 
    
    out = new FileWriter( "C:/Users/Documents/Live/data.CSV" );
    out.write ("User, Figure 1,Figure 2, Figure 3, Figure 4 ");
    out.write ("\n");
    out.write ( "User" ) ;
    out.write (",");
    out.write ( session.getVariable( "Figure1" )==null ? 0 :session.getVariable( "Figure1" ));
    out.write (",");
    out.write ( session.getVariable( "Figure2" )==null?0:session.getVariable("Figure2") );
    out.write (",");
    out.write ( session.getVariable( "Figure3" ) );
    out.write (",");
    out.write ( session.getVariable( "Figure4" ) );
    out.close();
    
    session.log( "Writing data to a file." ); 
    

    【讨论】:

      【解决方案3】:

      我不知道你的会话类型。所以我猜 session.getVariable() 可能返回 null。 如果你运行这段代码:

      import java.io.FileWriter;
      import java.io.IOException;
      
      public class Main {
          public static void main(String[] args) throws IOException {
              Integer integer = null;
              FileWriter out = new FileWriter( "data.CSV" );
              out.write(integer);
          }
      }
      

      程序将抛出 NullPointerException。

      Java8 Optional类是一个可以保存空值的容器。我们可以用它来检查一个Integer对象是否为空。 另一个错误是 write 方法是向 Stream 中写入一个字节。您需要 PrintWriter 和 print 方法才能将 int 直接写入文件。

      import java.io.FileWriter;
      import java.io.IOException;
      import java.io.PrintWriter;
      import java.util.Optional;
      
      public class Main {
          public static void main(String[] args) throws IOException {
              Integer a = null;
              Integer b = 1;
              FileWriter out = new FileWriter( "data.CSV" );
              PrintWriter printWriter = new PrintWriter(out);
              Optional<Integer> oa = Optional.ofNullable(a);
              Optional<Integer> ob = Optional.ofNullable(b);
              printWriter.print(oa.orElse(0));
              printWriter.print(ob.orElse(0));
              out.close();
              printWriter.close();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-26
        • 2017-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-15
        • 1970-01-01
        • 2019-05-29
        相关资源
        最近更新 更多