我需要以下的代码逻辑串和剥空的:一起进行分离
这是三个字符串变量,
String s1 = "A"; String s2 = "B"; String s3 = "C";
我需要有基于给定产出如下方案:
- 场景#1实际输出应为 “A/B/C”
- 场景#2当S1为空,输出应为“B/C”
- 方案#3,当S2为空,输出应该是 “A/C”
- 场景#4当S3为空,输出应该是 “A/B”`
这是可能使用三元操作?
我需要以下的代码逻辑串和剥空的:一起进行分离
这是三个字符串变量,
String s1 = "A"; String s2 = "B"; String s3 = "C";
我需要有基于给定产出如下方案:
这是可能使用三元操作?
这是不是一个真正的答案,因为我不会在这里使用三元运算。
如果您需要连接字符串取出空的,你可以写一个通用的函数(没有错误检查,没有优化,把它作为一个例子):
public static String join(String[] array, char separator) {
StringBuffer result = new StringBuffer();
for (int i = 0; i < array.length; ++i) {
if (array[i] != null && array[i].length() != 0) {
if (result.length() > 0)
result.append(separator);
result.append(array[i]);
}
}
return result.toString();
}
这是非常长于“内联”版本,但它可以工作,无论您想要加入的字符串的数量是多少(并且您可以将其更改为使用可变数量的参数)。它会使代码在哪里使用,比任何种类的if
树更清晰。
事情是这样的:
public static String join(char separator, String... items,) {
StringBuffer result = new StringBuffer();
for (String item: items) {
if (item != null && item.length() != 0) {
if (result.length() > 0)
result.append(separator);
result.append(item);
}
}
return result.toString();
}
您可以用番石榴类木和Apache Commons Lang中StringUtils.defaultIfBlank的帮助下做到这一点:
Joiner.on("/").skipNulls().join(
defaultIfBlank(s1, null),
defaultIfBlank(s2, null),
defaultIfBlank(s3, null)
);
您可以提取的三条线“如果需要处理任意数量的字符串,则将“defaultIfBlank”转换为带有循环的方法。
在第一次阅读时,我完全监视了“.skipNulls()”,这里是黄金。甚至还不知道它的存在。超级简单,用“可跳过”的东西:) – BAER
如果你只想使用Guava库,或者使用Guava的'Strings.emptyToNull'而不是'defaultIfBlank'。 –
一个java8路与流
Arrays.stream(new String[]{null, "", "word1", "", "word2", null, "word3", "", null})
.filter(x -> x != null && x.length() > 0)
.collect(Collectors.joining(" - "));
当然是肯定的,但你不觉得它更容易使用“普通” if语句读?我的意思是:你知道三元运算符,但是在级联中使用它并不清楚,那么谁会读你的代码就不那么清楚了。 –
其他四种情况呢?它们也可能吗? – Alnitak
是的,这是可能的。但是,我不会为此使用三元运算符。 – NPE