JavaScript有 Array.join()
js>["Bill","Bob","Steve"].join(" and ")
Bill and Bob and Steve
Run Code Online (Sandbox Code Playgroud)
Java有这样的东西吗?我知道我可以用StringBuilder自己解决一些问题:
static public String join(List<String> list, String conjunction)
{
StringBuilder sb = new StringBuilder();
boolean first = true;
for (String item : list)
{
if (first)
first = false;
else
sb.append(conjunction);
sb.append(item);
}
return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
...但是,如果像这样的东西已经是JDK的一部分,那就没有意义了.
mic*_*cha 715
使用Java 8,您无需任何第三方库即可完成此操作.
如果要加入字符串集合,可以使用新的String.join()方法:
List<String> list = Arrays.asList("foo", "bar", "baz");
String joined = String.join(" and ", list); // "foo and bar and baz"
Run Code Online (Sandbox Code Playgroud)
如果您的Collection类型与String不同,则可以将Stream API与加入的收集器一起使用:
List<Person> list = Arrays.asList(
new Person("John", "Smith"),
new Person("Anna", "Martinez"),
new Person("Paul", "Watson ")
);
String joinedFirstNames = list.stream()
.map(Person::getFirstName)
.collect(Collectors.joining(", ")); // "John, Anna, Paul"
Run Code Online (Sandbox Code Playgroud)
该StringJoiner课程也可能有用.
Cow*_*wan 301
所有对Apache Commons的引用都很好(这是大多数人使用的)但我认为Guava等效的Joiner有一个更好的API.
您可以使用简单的连接案例
Joiner.on(" and ").join(names)
Run Code Online (Sandbox Code Playgroud)
但也很容易处理空值:
Joiner.on(" and ").skipNulls().join(names);
Run Code Online (Sandbox Code Playgroud)
要么
Joiner.on(" and ").useForNull("[unknown]").join(names);
Run Code Online (Sandbox Code Playgroud)
并且(只要我关心使用它优先于commons-lang),处理地图的能力:
Map<String, Integer> ages = .....;
String foo = Joiner.on(", ").withKeyValueSeparator(" is ").join(ages);
// Outputs:
// Bill is 25, Joe is 30, Betty is 35
Run Code Online (Sandbox Code Playgroud)
这对于调试等非常有用.
Arn*_*ter 135
没有开箱即用,但许多图书馆都有类似的:
Commons Lang:
org.apache.commons.lang.StringUtils.join(list, conjunction);
Run Code Online (Sandbox Code Playgroud)
弹簧:
org.springframework.util.StringUtils.collectionToDelimitedString(list, conjunction);
Run Code Online (Sandbox Code Playgroud)
Raf*_*den 122
在Android上,您可以使用TextUtils类.
TextUtils.join(" and ", names);
Run Code Online (Sandbox Code Playgroud)
Bar*_*ers 49
不,标准Java API中没有这样的便捷方法.
毫不奇怪,Apache Commons 在他们的StringUtils类中提供了这样的东西,以防你不想自己编写它.
amr*_*mra 38
Java 8中的三种可能性:
List<String> list = Arrays.asList("Alice", "Bob", "Charlie")
String result = String.join(" and ", list);
result = list.stream().collect(Collectors.joining(" and "));
result = list.stream().reduce((t, u) -> t + " and " + u).orElse("");
Run Code Online (Sandbox Code Playgroud)
aif*_*ifa 25
使用java 8收集器,可以使用以下代码完成:
Arrays.asList("Bill", "Bob", "Steve").stream()
.collect(Collectors.joining(" and "));
Run Code Online (Sandbox Code Playgroud)
此外,Java 8中最简单的解决方案:
String.join(" and ", "Bill", "Bob", "Steve");
Run Code Online (Sandbox Code Playgroud)
要么
String.join(" and ", Arrays.asList("Bill", "Bob", "Steve"));
Run Code Online (Sandbox Code Playgroud)
gav*_*koa 21
我写了这个(我用它来bean和利用toString,所以不要写Collection<String>):
public static String join(Collection<?> col, String delim) {
StringBuilder sb = new StringBuilder();
Iterator<?> iter = col.iterator();
if (iter.hasNext())
sb.append(iter.next().toString());
while (iter.hasNext()) {
sb.append(delim);
sb.append(iter.next().toString());
}
return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
但是CollectionJSP不支持,所以对于TLD我写道:
public static String join(List<?> list, String delim) {
int len = list.size();
if (len == 0)
return "";
StringBuilder sb = new StringBuilder(list.get(0).toString());
for (int i = 1; i < len; i++) {
sb.append(delim);
sb.append(list.get(i).toString());
}
return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
并.tld存档:
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee"
<function>
<name>join</name>
<function-class>com.core.util.ReportUtil</function-class>
<function-signature>java.lang.String join(java.util.List, java.lang.String)</function-signature>
</function>
</taglib>
Run Code Online (Sandbox Code Playgroud)
并在JSP文件中使用它:
<%@taglib prefix="funnyFmt" uri="tag:com.core.util,2013:funnyFmt"%>
${funnyFmt:join(books, ", ")}
Run Code Online (Sandbox Code Playgroud)
Juh*_*älä 19
如果您想在没有任何外部库的情况下使用JDK,那么您拥有的代码是正确的方法.您可以在JDK中使用简单的"单行".
如果您可以使用外部库,我建议您查看Apache Commons库中的org.apache.commons.lang.StringUtils类.
用法示例:
List<String> list = Arrays.asList("Bill", "Bob", "Steve");
String joinedResult = StringUtils.join(list, " and ");
Run Code Online (Sandbox Code Playgroud)
Dan*_*eón 17
实现它的一种正统方法是定义一个新函数:
public static String join(String joinStr, String... strings) {
if (strings == null || strings.length == 0) {
return "";
} else if (strings.length == 1) {
return strings[0];
} else {
StringBuilder sb = new StringBuilder(strings.length * 1 + strings[0].length());
sb.append(strings[0]);
for (int i = 1; i < strings.length; i++) {
sb.append(joinStr).append(strings[i]);
}
return sb.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
样品:
String[] array = new String[] { "7, 7, 7", "Bill", "Bob", "Steve",
"[Bill]", "1,2,3", "Apple ][","~,~" };
String joined;
joined = join(" and ","7, 7, 7", "Bill", "Bob", "Steve", "[Bill]", "1,2,3", "Apple ][","~,~");
joined = join(" and ", array); // same result
System.out.println(joined);
Run Code Online (Sandbox Code Playgroud)
输出:
7,7,7和Bill和Bob和Steve以及[Bill]和1,2,3和Apple] [和〜,〜
您可以使用具有StringUtils类和join方法的apache commons库.
查看以下链接:https://commons.apache.org/proper/commons-lang/javadocs/api.2.0/org/apache/commons/lang/StringUtils.html
请注意,上面的链接可能会随着时间的推移而过时,在这种情况下,您只需在Web上搜索"apache commons StringUtils",这将允许您查找最新的引用.
(从这个线程引用) C#String.Format()和String.Join()的Java等价物
java.util.StringJoinerJava 8有一个StringJoiner类.但是你仍然需要编写一些样板文件,因为它是Java.
StringJoiner sj = new StringJoiner(" and ", "" , "");
String[] names = {"Bill", "Bob", "Steve"};
for (String name : names) {
sj.add(name);
}
System.out.println(sj);
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
String aToString = java.util.Arrays.toString(anArray);
// Do not need to do this if you are OK with '[' and ']'
aToString = aToString.substring(1, aToString.length() - 1);
Run Code Online (Sandbox Code Playgroud)
或者单行(只有当你不想要'['和']'时)
String aToString = java.util.Arrays.toString(anArray).substring(1).replaceAll("\\]$", "");Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
与java 1.8流可以使用,
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
List<String> list = Arrays.asList("Bill","Bob","Steve").
String str = list.stream().collect(Collectors.joining(" and "));
Run Code Online (Sandbox Code Playgroud)
一个有用的方法是使用纯JDK在一个职责范围内完成它:
String[] array = new String[] { "Bill", "Bob", "Steve","[Bill]","1,2,3","Apple ][" };
String join = " and ";
String joined = Arrays.toString(array).replaceAll(", ", join)
.replaceAll("(^\\[)|(\\]$)", "");
System.out.println(joined);
Run Code Online (Sandbox Code Playgroud)
输出:
比尔和鲍勃,史蒂夫和[比尔]和1,2,3和苹果] [
一个不太完美,不太有趣的方式!
String[] array = new String[] { "7, 7, 7","Bill", "Bob", "Steve", "[Bill]",
"1,2,3", "Apple ][" };
String join = " and ";
for (int i = 0; i < array.length; i++) array[i] = array[i].replaceAll(", ", "~,~");
String joined = Arrays.toString(array).replaceAll(", ", join)
.replaceAll("(^\\[)|(\\]$)", "").replaceAll("~,~", ", ");
System.out.println(joined);
Run Code Online (Sandbox Code Playgroud)
输出:
7,7,7和Bill和Bob和Steve以及[Bill]和1,2,3和Apple] [
| 归档时间: |
|
| 查看次数: |
427145 次 |
| 最近记录: |