用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()
- 使用一两个临时变量(编译器将对其进行优化)
String.format()
允许将来更改格式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());