我需要以下的代碼邏輯串和剝空的:一起進行分離
這是三個字符串變量,
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