자바 : PHP의 join ()과 같은 배열 함수?
String[]
접착제 끈 으로 조인하고 싶습니다 . 이것에 대한 기능이 있습니까?
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 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
약 10 줄의 코드로 이러한 함수를 쉽게 작성할 수 있습니다.
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();
}
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();
}
요즘 많은 질문과 마찬가지로 Java 8이 구출되었습니다.
Java 8 java.lang.String
은 원하는 것을 정확하게 수행 하는 새로운 정적 메소드를 추가했습니다 .
public static String join(CharSequence delimeter, CharSequence... elements);
그것을 사용 :
String s = String.join(", ", new String[] {"Hello", "World", "!"});
결과 :
"Hello, World, !"
구글 구아바의 라이브러리에는 이런 종류의 기능이 있습니다 . API에서도 String [] 예제를 볼 수 있습니다.
API에서 이미 설명했듯이 빌더 메소드의 불변성을주의하십시오.
객체 배열을 허용하므로 귀하의 경우에 효과가 있습니다. 이전 경험에서 반복 가능한 스택에 가입하려고 시도했지만 정상적으로 작동합니다.
나에게서 샘플 :
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("^\\[|\\]$", "")
그러나 ... 이것은 배열 또는 목록의 값에 문자열 ","이 포함되어 있지 않다는 것을 알고있는 경우에만 작동합니다.
Spring Framework 를 사용하는 경우 StringUtils 클래스가 있습니다.
import static org.springframework.util.StringUtils.arrayToDelimitedString;
arrayToDelimitedString(new String[] {"A", "B", "C"}, "\n");
핵심이 아닙니다. "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();
}
배열에서 문자열로의 빠른 변환을 찾으러 온다면 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)));
}
내가 아는 내장은 없습니다.
Apache Commons LangStringUtils
에는 많은 결합 함수를 포함 하는 클래스 가 있습니다.
이것이 내가하는 방법입니다.
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 클래스의 메소드 만 사용하는 3 줄 방법을 좋아합니까?
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());
}
"str1", "str2", ""에서 "str1, str2"를 가져 오려면 다음을 수행하십시오.
Stream.of("str1", "str2", "").filter(str -> !str.isEmpty()).collect(Collectors.joining(", "));
또한 널 검사를 추가 할 수 있습니다
Functional Java 라이브러리를 사용 중이고 어떤 이유로 Java 8의 스트림 (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)
내가 가장 많이 사용하는 간단한 속기 기술이 있습니다.
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]);
}
참고 URL : https://stackoverflow.com/questions/1515437/java-function-for-arrays-like-phps-join
'Programing' 카테고리의 다른 글
C #에서 문자열 비교 방법의 차이점 (0) | 2020.04.03 |
---|---|
안드로이드에서 프로그래밍 방식으로 배경 드로어 블을 설정하는 방법 (0) | 2020.04.02 |
16 진 문자열을 바이트 배열로 변환하려면 어떻게해야합니까? (0) | 2020.04.02 |
vim에서 검색하기 전의 위치로 돌아가려면 어떻게해야합니까? (0) | 2020.04.02 |
Emacs로 '실행 취소'후 변경 사항을 어떻게 '다시 실행'합니까? (0) | 2020.04.02 |