我想String[]
用胶水线加入。有这个功能吗?
我想String[]
用胶水线加入。有这个功能吗?
Answers:
从Java8开始,可以使用String.join()
。
String.join(", ", new String[]{"Hello", "World", "!"})
产生:
Hello, World, !
否则,Apache Commons Lang有一个StringUtils
类,该类具有join
将数组连接在一起以构成的功能String
。
例如:
StringUtils.join(new String[] {"Hello", "World", "!"}, ", ")
生成以下内容String
:
Hello, World, !
String.join()
Java 8中引入的新方法的引用。这样,大量阅读此公认答案的人将从中受益。目前,提到这一事实的投票率最高的答案是在下面落败了……
String.join()
仅适用于List<CharSequence>
或CharSequence[]
元素。
如果您正在寻找要在android中使用的内容,则为:
String android.text.TextUtils.join(CharSequence delimiter, Object[] tokens)
例如:
String joined = TextUtils.join(";", MyStringArray);
在Java 8中,您可以使用
1)流API:
String[] a = new String[] {"a", "b", "c"};
String result = Arrays.stream(a).collect(Collectors.joining(", "));
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
您可以轻松地用大约十行代码编写这样的函数:
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();
}
一个小的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();
}
.append()
每个都使用两次String
而不是将它们串联然后附加到构建器,会更好吗?
谷歌番石榴的图书馆也具有这种能力。您也可以从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) + "|");
打印出: |i am a coder|
鉴于:
String[] a = new String[] { "Hello", "World", "!" };
然后,作为替代coobird的答案,胶水为“,”:
Arrays.asList(a).toString().replaceAll("^\\[|\\]$", "")
或与其他字符串连接,例如“&amp;”。
Arrays.asList(a).toString().replaceAll(", ", " & ").replaceAll("^\\[|\\]$", "")
但是...仅当您知道数组或列表中的值不包含字符串“,”时,此方法才有效。
Arrays.asList(a).toString()
为我想做的事工作
如果您使用的是Spring Framework,则拥有StringUtils类:
import static org.springframework.util.StringUtils.arrayToDelimitedString;
arrayToDelimitedString(new String[] {"A", "B", "C"}, "\n");
不是核心,不。搜索“ java数组连接字符串胶水”将为您提供一些有关如何实现此功能的代码段。
例如
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();
}
如果您在这里寻找快速的数组到字符串转换,请尝试Arrays.toString()。
创建
Object[]
传递的字符串表示形式。结果用方括号("[]"
)括起来,每个元素通过String.valueOf(Object)
和转换为字符串,并用分隔", "
。如果数组是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();
}
递归:
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)));
}
copyOfRange()
”)而言效率很低。
我不知道内置什么。
Apache Commons Lang有一个名为的类StringUtils
,其中包含许多联接函数。
这就是我的方法。
private String join(String[] input, String delimiter)
{
StringBuilder sb = new StringBuilder();
for(String value : input)
{
sb.append(value);
sb.append(delimiter);
}
int length = sb.length();
if(length > 0)
{
// Remove the extra delimiter
sb.setLength(length - delimiter.length());
}
return sb.toString();
}
类似的选择
/**
* @param delimiter
* @param inStr
* @return String
*/
public static String join(String delimiter, String... inStr)
{
StringBuilder sb = new StringBuilder();
if (inStr.length > 0)
{
sb.append(inStr[0]);
for (int i = 1; i < inStr.length; i++)
{
sb.append(delimiter);
sb.append(inStr[i]);
}
}
return sb.toString();
}
我的旋转。
public static String join(Object[] objects, String delimiter) {
if (objects.length == 0) {
return "";
}
int capacityGuess = (objects.length * objects[0].toString().length())
+ ((objects.length - 1) * delimiter.length());
StringBuilder ret = new StringBuilder(capacityGuess);
ret.append(objects[0]);
for (int i = 1; i < objects.length; i++) {
ret.append(delimiter);
ret.append(objects[i]);
}
return ret.toString();
}
public static String join(Object... objects) {
return join(objects, "");
}
您喜欢仅使用String类的方法的三行方式吗?
static String join(String glue, String[] array) {
String line = "";
for (String s : array) line += s + glue;
return (array.length == 0) ? line : line.substring(0, line.length() - glue.length());
}
StringBuilder
如果需要效率,请使用:P
如果您使用的是Functional Java库,并且由于某种原因不能使用Java 8中的Streams(使用Android + Retrolambda插件时可能会发生这种情况),那么可以使用以下功能性解决方案:
String joinWithSeparator(List<String> items, String separator) {
return items
.bind(id -> list(separator, id))
.drop(1)
.foldLeft(
(result, item) -> result + item,
""
);
}
请注意,这不是最有效的方法,但对于小型列表确实有效。
我使用StringBuilder这样做:
public static String join(String[] source, String delimiter) {
if ((null == source) || (source.length < 1)) {
return "";
}
StringBuilder stringbuilder = new StringBuilder();
for (String s : source) {
stringbuilder.append(s + delimiter);
}
return stringbuilder.toString();
} // join((String[], String)
s + delimiter
(使用plus运算符进行字符串连接)无法实现使用的全部目的StringBuilder
。
我经常使用简单的速记技术。
String op = new String;
for (int i : is)
{
op += candidatesArr[i-1]+",";
}
op = op.substring(0, op.length()-1);
java.util.Arrays具有一个'asList'方法。与java.util.List / ArrayList API一起,可以为您提供所需的一切:
private static String[] join(String[] array1, String[] array2) {
List<String> list = new ArrayList<String>(Arrays.asList(array1));
list.addAll(Arrays.asList(array2));
return list.toArray(new String[0]);
}