我想用一个粘合字符串(glue string)连接一个String[]
数组,有没有相关的函数可以实现这个目的?
我想用一个粘合字符串(glue string)连接一个String[]
数组,有没有相关的函数可以实现这个目的?
从Java8开始,可以使用String.join()
。
String.join(", ", new String[]{"Hello", "World", "!"})
Hello, World, !
StringUtils
类,其中包含一个 join
函数,该函数将数组连接在一起以生成一个 String
。StringUtils.join(new String[] {"Hello", "World", "!"}, ", ")
String
:Hello, World, !
String.join()
方法的引用。这样,阅读此答案的人群将从这一知识中受益。目前,提到这一事实的最高票答案已经被淹没在下面了…… - Duncan Jonescompile 'org.apache.commons:commons-lang3:3.3.2'
- Elliot ChanceString.join()
只适用于 List<CharSequence>
或 CharSequence[]
类型的元素。 - Enigo如果您正在寻找在Android上使用的内容,则是:
String android.text.TextUtils.join(CharSequence delimiter, Object[] tokens)
例如:String joined = TextUtils.join(";", MyStringArray);
1) Stream API :
String[] a = new String[] {"a", "b", "c"};
String result = Arrays.stream(a).collect(Collectors.joining(", "));
2) 新的String.join方法: https://dev59.com/zHVC5IYBdhLWcg3wxEN1#21756398
3) java.util.StringJoiner类: http://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html
你可以轻松地用约十行代码编写这样的函数:
String combine(String[] s, String glue)
{
int k = s.length;
if ( k == 0 )
{
return null;
}
StringBuilder out = new StringBuilder();
out.append( s[0] );
for ( int x=1; x < k; ++x )
{
out.append(glue).append(s[x]);
}
return out.toString();
}
//join(String array,delimiter)
public static String join(String r[],String d)
{
if (r.length == 0) return "";
StringBuilder sb = new StringBuilder();
int i;
for(i=0;i<r.length-1;i++){
sb.append(r[i]);
sb.append(d);
}
sb.append(r[i]);
return sb.toString();
}
.append()
两次而不是将它们连接起来再附加到builder中,这样会更好吗? - Talha Ahmed Khan最近关于很多问题,Java 8 可以帮上忙:
Java 8 新增了一个静态方法到 java.lang.String
中,它正好可以满足你的需求:
public static String join(CharSequence delimeter, CharSequence... elements);
使用它:
String s = String.join(", ", new String[] {"Hello", "World", "!"});
结果为:
"Hello, World, !"
谷歌的guava库也具有这种功能。你可以从API中查看String[]的示例。
如API所述,要注意构建器方法的不可变性。
它可以接受对象数组,因此它可以在你的情况下工作。在我的以往经验中,我尝试连接了一个Stack,它是一个iterable,并且可以正常工作。
以下是我的示例:
Deque<String> nameStack = new ArrayDeque<>();
nameStack.push("a coder");
nameStack.push("i am");
System.out.println("|" + Joiner.on(' ').skipNulls().join(nameStack) + "|");
输出:|我是一名程序员|
给定:
String[] a = new String[] { "Hello", "World", "!" };
Arrays.asList(a).toString().replaceAll("^\\[|\\]$", "")
Arrays.asList(a).toString().replaceAll(", ", " & ").replaceAll("^\\[|\\]$", "")
然而,这个方法仅在您确定数组或列表中的值不包含字符字符串", "时才有效。
Arrays.asList(a).toString()
对我想要做的事情起到了作用。 - Solomon Ucko如果你正在使用Spring Framework,那么你可以使用StringUtils 类:
import static org.springframework.util.StringUtils.arrayToDelimitedString;
arrayToDelimitedString(new String[] {"A", "B", "C"}, "\n");
public static String join(Collection s, String delimiter) {
StringBuffer buffer = new StringBuffer();
Iterator iter = s.iterator();
while (iter.hasNext()) {
buffer.append(iter.next());
if (iter.hasNext()) {
buffer.append(delimiter);
}
}
return buffer.toString();
}