programing

PHP의 join()과 같은 어레이의 Java 함수?

newsource 2022. 8. 25. 00:01

PHP의 join()과 같은 어레이의 Java 함수?

가입하고 싶다String[]끈으로 묶어서.이거 기능 있어요?

Java8부터 사용할 수 있습니다.String.join().

String.join(", ", new String[]{"Hello", "World", "!"})

생성:

Hello, World, !

그렇지 않으면 Apache Commons Lang은 함께 어레이를 결합하는 기능을 가진 클래스를 가지고 있습니다.String.

예를 들어 다음과 같습니다.

StringUtils.join(new String[] {"Hello", "World", "!"}, ", ")

다음을 생성합니다.String:

Hello, World, !

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.가입방법 : https://stackoverflow.com/a/21756398/466677

3) java.displaces.String Joiner 클래스: 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() 대신 약간의 mod를 사용합니다.

//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, !"

구글 구아바의 라이브러리에도 이런 기능이 있다.String [ ]의 예는 API에서도 확인할 수 있습니다.

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", "!" };

그리고 coubird의 대답 대신 접착제가 ", ":

Arrays.asList(a).toString().replaceAll("^\\[|\\]$", "")

또는 " &amp; "와 같은 다른 문자열과 연결합니다.

Arrays.asList(a).toString().replaceAll(", ", " &amp; ").replaceAll("^\\[|\\]$", "")

하지만...이 값은 배열 또는 목록의 값에 문자열 " , " 가 포함되지 않은 경우에만 작동합니다.

Spring Framework를 사용하는 경우 String Utils 클래스가 있습니다.

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으로 변환됩니다.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 Lang에는 여러 join 함수를 포함하는 클래스가 있습니다.

이렇게 하는 거예요.

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(", ")); 

또한 null-check를 추가할 수 있습니다.

기능 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,
                    ""
            );
}

가장 효율적인 방법은 아니지만 소규모 목록에 적합합니다.

어떤 방법을 선택하든 배열 내의 null 값에 주의하십시오.문자열 표현은 "null"이므로 원하는 동작이 아닌 경우 null 요소를 건너뜁니다.

String[] parts = {"Hello", "World", null, "!"};
Stream.of(parts)
      .filter(Objects::nonNull)
      .collect(Collectors.joining(" "));

String Builder를 사용하여 다음과 같이 수행합니다.

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.displaces를 클릭합니다.어레이에는 '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