Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java编写多个字符串的可读方法_Java_String - Fatal编程技术网

用java编写多个字符串的可读方法

用java编写多个字符串的可读方法,java,string,Java,String,我用一种非常神秘的方式写了一些代码。对于除我之外的任何人来说,这肯定会是一场维护噩梦 它是字符串连接、三元运算符和使用+运算符连接的混合体 所以我的问题是,我该如何让这句话更具可读性 tb.setTally_narration( tb.getTally_mode().equals("Ca") ? "Receipt No. " .concat(tb.getTally_receipt_no()) .concat(", "

我用一种非常神秘的方式写了一些代码。对于除我之外的任何人来说,这肯定会是一场维护噩梦

它是字符串连接、三元运算符和使用
+
运算符连接的混合体

所以我的问题是,我该如何让这句话更具可读性

tb.setTally_narration(
     tb.getTally_mode().equals("Ca") ? 
        "Receipt No. "
             .concat(tb.getTally_receipt_no())
             .concat(", "+tb.getTally_mode()) : 
        "Receipt No. "
             .concat(tb.getTally_receipt_no()+", "+tb.getTally_mode())
             .concat(", "+tb.getTally_instrument_no()+", "+tb.getTally_instrument_date()+", "+tb.getTally_instrument_bank())
);

编辑:我意识到这个问题是主观的。我觉得它属于codereview stackexchange网站。可以把它移到那里吗?

这里有很多选择,但是如果可维护性是你的目标(通常应该是这样),那么就更详细一点

  • 使用if-then而不是?:
  • 使用+而不是concat()
  • 使用一两个临时变量(编译器将对其进行优化)
因此:

  • 方法名称为Java格式
  • String.format()
    允许将来更改格式
  • 对非空字符串(“Ca”)调用
    equals()
    ,以减少可能出现NPE的可能性

  • 因为字符串的第一行看起来是相同的,所以我将其简单地写为:

    StringBuilder narration = new StringBuilder("Receipt No. ");
    
    narration.append(tb.getTally_receipt_no())
             .append(", ").append(tb.getTally_mode());
    if (!"Ca".equals(tb.getTally_mode()))
    {
        narration.append(", ").append(tb.getTally_instrument_no())
                 .append(", ").append(tb.getTally_instrument_date())
                 .append(", ").append(tb.getTally_instrument_bank());
    }
    
    tb.setTally_narration(narration.toString());
    

    使用
    StringBuilder
    。使用printf样式
    String。format
    。将使用该样式并发回我的体验。谢谢使用标准的“如果”语句,而不是三元运算符,将使其更“可读”@Henrik我必须这样做,因为OP并不是在抱怨有“数百条这样的语句”。。。当然,我不知道我能不能。如果他真的有更多,那么一个框架就是最好的选择,我同意这一点。不错,尼克。但仍有一些重复。请注意,第一部分始终是相同的,因此我们可以无条件地构建该部分,并且仅当
    …equals(“Ca”)
    不正确时才添加第二部分。
    .append(,“+…)
    不是一个好的做法,请使用
    .append(,”).append(…)
    。@AmirPashazadeh是的,很好(谢谢!)。自从我复制粘贴后,我一直很懒,把它们混在一起,但如果我要发布一个答案,最好是把它改正过来。这看起来不错。不过,我也没什么经验。此外,所有这些旁白实例是否可以链接到许多.append()调用,比如
    attransation.append(“this”).append(“that”)
    ,而不是
    attransation.append(“this”);address.append(“that”)
    @Ahsan它们确实可以,并且已经在
    ,“
    后面跟变量的情况下。我会更新其余的使用更多的链接,节省一些打字!如果(!“Ca.equals(mode))?@Fildor-ah.,它不应该是
    吗。。当然
    
      String rNum    = tb.getTallyReceiptNum();
      String mode    = tb.getTallyMode();
      String iNum    = tb.getTallyInstrumentNum();
      String iDate   = tb.getTallyInstrumentDate();
      String iBank   = tb.getTallyInstrumentBank();
    
      String narration = String.format("Receipt No. %s, %s", rNum, mode);
    
      if(! "Ca".equals(mode)){
        narration = String.format("%s, %s, %s, %s", narration, iNum, iDate, iBank);
      }
    
    StringBuilder narration = new StringBuilder("Receipt No. ");
    
    narration.append(tb.getTally_receipt_no())
             .append(", ").append(tb.getTally_mode());
    if (!"Ca".equals(tb.getTally_mode()))
    {
        narration.append(", ").append(tb.getTally_instrument_no())
                 .append(", ").append(tb.getTally_instrument_date())
                 .append(", ").append(tb.getTally_instrument_bank());
    }
    
    tb.setTally_narration(narration.toString());