我有4个字符串String 1 ,String 2 ,String 3 , String 4
。我想将它们添加到名为phones
的字符串中。但是我不想要一个简单的:
String phones = String 1 + "~" + String 2 + "~" + String 3 +"~" + String 4;
如果String 2 and 3
为空,我会得到:String 1~~~String 4
。
如何使phones
仅显示非空字符串并在每个字符串之间添加"~"
?所以如果String 2 and 3
为空,我会得到:
而是String 1 ~ String 4
。
答案 0 :(得分:4)
如果您使用的是Java 8或更高版本,则根本不需要太多代码。
String phones = Stream.of( string1, string2, string3, string4 )
.filter( s -> ! s.isEmpty()) // Filter out empty strings
.collect( Collectors.joining("~"));
如果您有空值,您也可以过滤这些值。
String phones = Stream.of( string1, string2, string3, string4 )
.filter( Objects::nonNull ) // <-- Filter out nulls
.filter( s -> ! s.isEmpty())
.collect( Collectors.joining("~"));
编辑:在Java 8之前
如果您使用的是早期版本的Java,一种方法是定义所需的操作一次,然后重复调用它。
public static void join( StringBuilder sb, String s ) {
if ( (null != s) && ! s.isEmpty()) {
if ( 0 < sb.length()) {
sb.append( "~" );
}
sb.append( s );
}
}
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
String string1 = "foo", string2 = "", string3 = null, string4 = "bar";
join( sb, string1 );
join( sb, string2 );
join( sb, string3 );
join( sb, string4 );
System.out.println( sb.toString() );
}
答案 1 :(得分:2)
您可以使用StringBuilder
并检查空String
个String.isEmpty()
StringBuilder sb = new StringBuilder();
sb.append(string1);
if (!string2.isEmpty()) {
sb.append("~").append(string2);
}
if (!string3.isEmpty()) {
sb.append("~").append(string3);
}
if (!string4.isEmpty()) {
sb.append("~").append(string4);
}
String phone = sb.toString();
如果除了string4之外的所有字符串都为空,我将得到:~string4。有没有办法防止〜而不添加一堆else if语句?
您可以创建一个实用程序(或帮助程序)方法join
String
static void join(StringBuilder sb, String str) {
if (!str.isEmpty()) {
if (sb.length() > 0) {
sb.append('~');
}
sb.append(str);
}
}
然后使用
StringBuilder sb = new StringBuilder(string1);
join(sb, string2);
join(sb, string3);
join(sb, string4);
String phone = sb.toString();
答案 2 :(得分:1)
如果您使用的是Java 8,那么现在有java.util.StringJoiner类。
例如:
StringJoiner sj = new StringJoiner("~");
if (!string1.isEmpty())
sj.add(string1);
if (!string2.isEmpty())
sj.add(string2);
if (!string3.isEmpty())
sj.add(string3);
if (!string4.isEmpty())
sj.add(string4);
String desiredString = sj.toString();