coo*_*ird 307
从Java8开始可以使用String.join()
.
String.join(", ", new String[]{"Hello", "World", "!"})
Run Code Online (Sandbox Code Playgroud)
产生:
Hello, World, !
Run Code Online (Sandbox Code Playgroud)
否则,Apache Commons Lang有一个StringUtils
类,它具有join
将数组连接在一起的函数String
.
例如:
StringUtils.join(new String[] {"Hello", "World", "!"}, ", ")
Run Code Online (Sandbox Code Playgroud)
生成以下内容String
:
Hello, World, !
Run Code Online (Sandbox Code Playgroud)
Noa*_*oah 71
如果您正在寻找在Android中使用的内容,它是:
String android.text.TextUtils.join(CharSequence delimiter, Object[] tokens)
Run Code Online (Sandbox Code Playgroud)
例如:
String joined = TextUtils.join(";", MyStringArray);
Run Code Online (Sandbox Code Playgroud)
Mar*_*gor 55
在Java 8中,您可以使用
1)流API:
String[] a = new String[] {"a", "b", "c"};
String result = Arrays.stream(a).collect(Collectors.joining(", "));
Run Code Online (Sandbox Code Playgroud)
2)新的String.join方法:https://stackoverflow.com/a/21756398/466677
3)java.util.StringJoiner类:http://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html
Jay*_*Jay 52
您可以在大约十行代码中轻松编写这样的函数:
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();
}
Run Code Online (Sandbox Code Playgroud)
eve*_*sto 25
一个小mod而不是使用substring():
//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();
}
Run Code Online (Sandbox Code Playgroud)
icz*_*cza 18
与最近的许多问题一样,Java 8也在拯救:
Java 8添加了一个新的静态方法,java.lang.String
它正是您想要的:
public static String join(CharSequence delimeter, CharSequence... elements);
Run Code Online (Sandbox Code Playgroud)
使用它:
String s = String.join(", ", new String[] {"Hello", "World", "!"});
Run Code Online (Sandbox Code Playgroud)
结果是:
"Hello, World, !"
Run Code Online (Sandbox Code Playgroud)
ber*_*tie 14
Google guava的库也具有这种功能.您也可以从API中看到String []示例.
正如api中已经描述的那样,要注意构建器方法的不变性.
它可以接受一系列对象,因此它适用于您的情况.在我以前的经验中,我尝试加入一个可迭代的Stack,它工作正常.
我的样品:
Deque<String> nameStack = new ArrayDeque<>();
nameStack.push("a coder");
nameStack.push("i am");
System.out.println("|" + Joiner.on(' ').skipNulls().join(nameStack) + "|");
Run Code Online (Sandbox Code Playgroud)
打印出来: |i am a coder|
鉴于:
String[] a = new String[] { "Hello", "World", "!" };
Run Code Online (Sandbox Code Playgroud)
然后作为coobird的答案的替代,胶水是",":
Arrays.asList(a).toString().replaceAll("^\\[|\\]$", "")
Run Code Online (Sandbox Code Playgroud)
或者用不同的字符串连接,例如"&".
Arrays.asList(a).toString().replaceAll(", ", " & ").replaceAll("^\\[|\\]$", "")
Run Code Online (Sandbox Code Playgroud)
但是......只有当你知道数组或列表中的值不包含字符串","时,这个才有效.
如果您使用的是Spring Framework,那么您将拥有StringUtils类:
import static org.springframework.util.StringUtils.arrayToDelimitedString;
arrayToDelimitedString(new String[] {"A", "B", "C"}, "\n");
Run Code Online (Sandbox Code Playgroud)
小智 8
不是核心,不是.搜索"java array join string glue"会给你一些关于如何实现这一点的代码片段.
例如
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();
}
Run Code Online (Sandbox Code Playgroud)
如果您已经在这里寻找快速的数组到字符串转换,请尝试使用Arrays.toString().
创建
Object[]
传递的String表示形式.结果被括号("[]"
)括起来,每个元素都通过String.valueOf(Object)
和转换为一个String", "
.如果是数组null
,则"null"
返回.
只是为了"我是最短的"挑战,这里是地雷;)
迭代:
public static String join(String s, Object... a) {
StringBuilder o = new StringBuilder();
for (Iterator<Object> i = Arrays.asList(a).iterator(); i.hasNext();)
o.append(i.next()).append(i.hasNext() ? s : "");
return o.toString();
}
Run Code Online (Sandbox Code Playgroud)
递归:
public static String join(String s, Object... a) {
return a.length == 0 ? "" : a[0] + (a.length == 1 ? "" : s + join(s, Arrays.copyOfRange(a, 1, a.length)));
}
Run Code Online (Sandbox Code Playgroud)