[英]How to add append “\n” to StringBuilder to get values in next line?
[英]StringBuilder append() and null values
我有一個String
列表,我想將它們與它們之間的空格連接起來。 所以我正在使用StringBuilder
。 現在,如果任何String
是null
,它們將按字面意義作為“null”存儲在StringBuilder
中。 這是一個小程序來說明這個問題:
public static void main(String ss[]) {
StringBuilder sb = new StringBuilder();
String s;
s = null;
System.out.println(sb.append("Value: ").append(s));
}
我希望 output 為“值:”,但結果為“值:空”
有辦法解決這個問題嗎?
您可以在附加對象之前對其進行檢查:
sb.append("Value: ");
if (s != null) sb.append(s);
System.out.println(sb);
要說明的一個關鍵點是 null 與空字符串不同。 空字符串仍然是一個帶有關聯方法和字段的字符串對象,其中空指針根本不是對象。
來自 StringBuilder 的 append 方法的文檔:
String 參數的字符按順序附加,通過參數的長度增加此序列的長度。 如果 str 為空,則附加四個字符“空”。
您可以使用 commons-lang 的StringUtils#defaultString()
:
sb.append("Value: ").append(StringUtils.defaultString(myVar));
在 Java 8 中,您還可以使用java.util.Optional類來提供默認值:
System.out.println(sb.append("Value: ").append(Optional.ofNullable(s).orElse("")));
在一行中,您可以執行以下操作:
System.out.println(sb.append("Value: ").append((s==null)?"":s));
import java.util.Objects;
...
sb.append(Objects.toString(s, ""));
使用 Java 內部工具,不需要外部庫。 toString
接受字符串,檢查它是否為null
,如果為null
,然后返回指定的默認值,在這種情況下為""
(空字符串),如果它不為null
則返回提供的字符串。
出於我的目的,我需要稍微概括一下答案#2。 這是相同的函數,將 Object 作為參數,而不是 String:
private String nullToEmpty(Object obj) {
return obj == null ? "" : obj.toString();
}
我結合了geeksforgeeks.org和@Benas 的答案。
map = map.entrySet()
.stream()
.peek(entry -> entry.setValue(Objects.toString(entry.getValue(), "")))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
來自java.utils
的Objects
。
@Shynthriir 提到的空檢查是解決問題的最簡單最有效的方法(AFAIK)。
但是,我強烈建議將字符串初始化為空字符串String str = "";
相反,這將為您在更復雜的編程工作中省去很多麻煩。
你可以這樣做:
sb.Replace("= ,", "= null,");
或:
sb.append("Value: ").append((s != null)? s: "NULL");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.