자바 스크립트 Array.join()
js>["Bill","Bob","Steve"].join(" and ")
Bill and Bob and Steve
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();
}
…하지만 JDK의 일부인 경우에는 그렇게 할 필요가 없습니다.
답변
Java 8을 사용하면 타사 라이브러리 없이이 작업을 수행 할 수 있습니다.
문자열 컬렉션에 가입하려면 새로운 String.join () 메서드를 사용할 수 있습니다 .
List<String> list = Arrays.asList("foo", "bar", "baz");
String joined = String.join(" and ", list); // "foo and bar and baz"
String 이외의 다른 유형의 Collection이있는 경우 Join Collector 와 함께 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"
StringJoiner
클래스는 유용 할 수 있습니다.
답변
Apache Commons에 대한 모든 참조는 훌륭하지만 (대부분의 사람들이 사용하는 것입니다) 구아바에 해당하는 Joiner 는 훨씬 더 좋은 API를 가지고 있다고 생각합니다 .
당신은 간단한 조인 케이스를 할 수 있습니다
Joiner.on(" and ").join(names)
또한 쉽게 null을 처리합니다.
Joiner.on(" and ").skipNulls().join(names);
또는
Joiner.on(" and ").useForNull("[unknown]").join(names);
그리고 (commons-lang보다 우선적으로 사용하는 데 관심이있는 한) 유용하게 사용할 수 있습니다.
Map<String, Integer> ages = .....;
String foo = Joiner.on(", ").withKeyValueSeparator(" is ").join(ages);
// Outputs:
// Bill is 25, Joe is 30, Betty is 35
디버깅 등에 매우 유용합니다.
답변
기본적으로는 아니지만 많은 라이브러리가 비슷합니다.
커먼즈 랭 :
org.apache.commons.lang.StringUtils.join(list, conjunction);
봄:
org.springframework.util.StringUtils.collectionToDelimitedString(list, conjunction);
답변
에 안드로이드 당신은 사용할 수 TextUtils의 클래스를.
TextUtils.join(" and ", names);
답변
아니요, 표준 Java API에는 그러한 편리한 방법이 없습니다.
놀랍게도 Apache Commons는 StringUtils 클래스 에서 직접 작성하고 싶지 않은 경우 이러한 기능을 제공합니다 .
답변
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("");
답변
Java 8 콜렉터를 사용하면 다음 코드를 사용하여 수행 할 수 있습니다.
Arrays.asList("Bill", "Bob", "Steve").stream()
.collect(Collectors.joining(" and "));
또한 Java 8에서 가장 간단한 솔루션 :
String.join(" and ", "Bill", "Bob", "Steve");
또는
String.join(" and ", Arrays.asList("Bill", "Bob", "Steve"));