syn*_*gma 33 java string concat
我知道以下内容:
String s = null;
System.out.println("s: " + s);
Run Code Online (Sandbox Code Playgroud)
将输出:s: null
.
我如何才能输出s: ?
?
在我而言,这是重要的,因为我有来连接String
从4个值s1, s2, s3, s4
,其中每个值可能会或可能不会具有null
价值.
我问这个问题,因为我不想要检查的S1到S4的每一个组合 (即检查是否这些变量null
)或更换"null"
用empty
String
在最后,我想可能有一些更好的方式来做到这一点.
Ste*_*n C 41
最简洁的解决方案是:
System.out.println("s: " + (s == null ? "" : s));
Run Code Online (Sandbox Code Playgroud)
或者也许创建或使用静态帮助方法来做同样的事情; 例如
System.out.println("s: " + denull(s));
Run Code Online (Sandbox Code Playgroud)
但是,这个问题具有过度使用/滥用的应用程序的"气味" null
.null
如果它具有与非空值的含义不同(并且需要不同)的特定含义,则最好仅使用/返回a .
例如:
null
,请考虑显式初始化它们""
. null
用来表示空数组或集合.null
时候抛出异常会更好.现在显然所有这些都有反例,有时你必须处理一个预先存在的API,无论出于什么原因,它都会给你空值.但是,根据我的经验,最好避免使用null
......大部分时间.
因此,在您的情况下,更好的方法可能是:
String s = ""; /* instead of null */
System.out.println("s: " + s);
Run Code Online (Sandbox Code Playgroud)
ski*_*iwi 25
您可以在Java 8中使用以下内容:
String s1 = "a";
String s2 = null;
String s3 = "c";
String s4 = "d";
String concat = Stream.of(s1, s2, s3, s4)
.filter(s -> s != null)
.collect(Collectors.joining());
Run Code Online (Sandbox Code Playgroud)
给
abc
Run Code Online (Sandbox Code Playgroud)
有几点需要注意:
Stream<String>
.Dav*_*ann 18
String s = null;
System.out.println("s: " + (s != null ? s : ""));
Run Code Online (Sandbox Code Playgroud)
但你真正要求的是一个空的合并运算符.
您可以使用Apache CommonsStringUtils.defaultString(String)
方法,或者如果您没有使用任何第三方库,您甚至可以编写自己的方法,只需一个班轮.
private static String nullToEmptyString(String str) {
return str == null ? "" : str;
}
Run Code Online (Sandbox Code Playgroud)
然后在你的sysout中使用它:
System.out.println("s: " + nullToEmptyString(s));
Run Code Online (Sandbox Code Playgroud)
您可以声明自己的方法concatenation
:
public static String concat(String... s)
{//Use varArgs to pass any number of arguments
if (s!=null) {
StringBuilder sb = new StringBuilder();
for(int i=0; i<s.length; i++) {
sb.append(s[i] == null ? "" : s[i]);
}
return sb.toString();
}
else {
return "";
}
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用java.util.Objects.toString()
Java 7中添加的方法:
String s = null;
System.out.println("s: " + Objects.toString(s, ""));
Run Code Online (Sandbox Code Playgroud)
这适用于任何对象,而不仅仅是字符串,当然,您可以提供另一个默认值,而不仅仅是空字符串.
归档时间: |
|
查看次数: |
25561 次 |
最近记录: |