我正在寻找一种将字符串数组合并成分隔符字符串的方法,与split()相反。
在尝试自己编写代码之前,希望在论坛上询问一下(因为JDK已经有了一切)。
据我所知,JDK中没有这样的方法。Apache Commons Lang库的StringUtils
类有多个重载的join()
方法可以实现您想要的功能。
String[] a = new String[]{"first","second","third"};
StringJoiner sj = new StringJoiner(",");
for(String s:a) sj.add(s);
System.out.println(sj); //first,second,third
String s = String.join(",", stringArray);
Arrays
实用程序包中提取此功能。import java.util.Arrays;
...
String delim = ":",
csv_record = "Field0:Field1:Field2",
fields[] = csv_record.split(delim);
String rebuilt_record = Arrays.toString(fields)
.replace(", ", delim)
.replaceAll("[\\[\\]]", "");
我从这里获取了以下示例here
:/*
7) Join Strings using separator >>>AB$#$CD$#$EF
*/
import org.apache.commons.lang.StringUtils;
public class StringUtilsTrial {
public static void main(String[] args) {
// Join all Strings in the Array into a Single String, separated by $#$
System.out.println("7) Join Strings using separator >>>"
+ StringUtils.join(new String[] { "AB", "CD", "EF" }, "$#$"));
}
}
如果你想创建一个与集合(Collection)一起使用的自定义方法,可以在DZone Snippets上找到几个例子。例如:
public static String join(AbstractCollection<String> s, String delimiter) {
if (s == null || s.isEmpty()) return "";
Iterator<String> iter = s.iterator();
StringBuilder builder = new StringBuilder(iter.next());
while( iter.hasNext() )
{
builder.append(delimiter).append(iter.next());
}
return builder.toString();
}
Arrays.toString()
是最简单的方法。根据之前的所有回答:
public static String join(Iterable<? extends Object> elements, CharSequence separator)
{
StringBuilder builder = new StringBuilder();
if (elements != null)
{
Iterator<? extends Object> iter = elements.iterator();
if(iter.hasNext())
{
builder.append( String.valueOf( iter.next() ) );
while(iter.hasNext())
{
builder
.append( separator )
.append( String.valueOf( iter.next() ) );
}
}
}
return builder.toString();
}
String.join()
方法来实现此功能。 - Brad Turek自从JDK8推出Streams和Lambdas,我非常喜欢它们,所以我建议:
public static String join( String delimiter, String[] array )
{
return Arrays.asList( array ).stream().collect( Collectors.joining( delimiter ) );
}
针对Android系统:在android.text.TextUtils中,有以下方法:
public static String join (CharSequence delimiter, Iterable tokens)
public static String join (CharSequence delimiter, Object[] tokens)
s = "foo:bar,baz".split("[:,]")
,那么您只能进行估计。 - user unknown