Java에서 문자열 배열을 문자열로 변환


242

문자열 배열을 문자열로 변환하는 Java 코드가 필요합니다.


어떤 종류의 배열입니까? 문자열 배열?
adarshr

2
array.toString()? 더 구체적으로 말하십시오.
Stan Kurilin

1
@Princeyesuraj의 공식 답변은에 의해 제공됩니다 adarshr . 자체 구분 기호를 원하면 JoeSlav 의 답변을 시도 할 수 있으며 스레드 문제가없는 경우 효율성 을 위해 StringBuffer 대신 StringBuilder 를 사용할 수 있습니다 . krock 의 대답은 좋지만 제 생각에는 약간 과잉입니다.
단테 5

답변:


470

배열의 "디버그 스타일"덤프 만 원하는 경우 :

String str = Arrays.toString(arr);

또는 더 많은 제어를 위해 (Java 8 이전) :

StringBuilder builder = new StringBuilder();
for(String s : arr) {
    builder.append(s);
}
String str = builder.toString();

(자바 8 이상) :

String str = String.join(",", arr);

그리고 당신이 안드로이드 각도에서 오는 경우 :

String str = TextUtils.join(",", arr);

문자열 사이에 원하는 문자가 있으면 위의 내용을 수정할 수 있습니다.

Java 8 이전 코드와 거의 동일한 코드를 볼 수 있지만 StringBuffer- StringBuilder를 사용하면 스레드로부터 안전하지 않은 새로운 클래스가 필요하지만 단일 스레드에서 불필요한 동기화로 인해 성능이 떨어집니다. 요컨대, StringBuilder99 %의 경우에 사용 하는 것이 좋습니다. 기능면에서는 두 가지가 동일합니다.

문자열을 사용 하지 말고 여기에 표시된 답변 중 일부와 같이 + =로 문자열을 추가하십시오. 배열에 항목이있는 수만큼 문자열 객체를 만들어 버려서 지붕을 통해 GC를 보냅니다. 작은 배열의 경우 실제로 차이를 느끼지 못할 수도 있지만 큰 배열의 경우 크기가 느릴 수 있습니다.


13
StringBuilder가 왜 + =보다 우수한 지에 대한 설명에 감사드립니다.
니콜라스 밀러

5
커버 아래에 + =를 사용하면 Java가이를 StringBuilder를 사용하여 변환합니다.
Javamann

6
@matteo, 당신은 사용해야 Arrays.toString(yourArray);하지만 난 당신이 사용하는 추측yourArray.toString();
Dzarafata

5
java 이후로 for-loop 대신을 1.8사용할 수 있습니다 String::join. String.join("", arr);
Jorn Vernee

2
안드로이드 개발자는 String result = TextUtils.join ( ",", list); stackoverflow.com/questions/33802971/…
Rahul Hawge 2012 년

102

Apache commons를 사용하십시오 StringUtils.join(). 그것은 매개 변수로 배열을 얻어 (도 대한 과부하 보유 IterableIterator매개 변수) 및 전화 toString()(null가 아닌 경우), 각 요소의 스트링 표현을 얻기 위해 각 요소. 그런 다음 각 요소 문자열 표현은 지정된 경우 사이에 구분 기호를 사용하여 하나의 문자열로 결합됩니다.

String joinedString = StringUtils.join(new Object[]{"a", "b", 1}, "-");
System.out.println(joinedString);

생산 :

a-b-1

1
사소한 수정 : joinedString = StringUtils.join (new Object [] { "a", "b", "1"}, "-");
questborn

35

나는 이것을 위해 Google의 Guava Joiner 를 사용하는 것을 좋아합니다 .

Joiner.on(", ").skipNulls().join("Harry", null, "Ron", "Hermione");

다음과 같은 문자열을 생성합니다.

new String("Harry, Ron, Hermione");

ETA : Java 8은 현재 비슷한 지원을합니다 :

String.join(", ", "Harry", "Ron", "Hermione");

null 값을 건너 뛰는 기능을 지원하지 않지만 쉽게 해결할 수 있습니다.


10
그러나 우리가 줄거리에 충실 null했다면 "그의 이름을 언급하지 말아야 할 사람"이 될 것입니다 :-)
Stephen C

22
용감한 사람이라면 ;-)Joiner.on(", ").useForNull("Voldemort").join("Harry", null, "Ron", "Hermione");
Rich

java-8 사용String.join(", ", "Harry", null, "Ron", "Hermione").replaceAll("null", "Voldermart");
Cjo

13

a기본 유형 의 배열이 주어지면이 작업을 수행 할 수 있습니다 .

StringBuffer result = new StringBuffer();
for (int i = 0; i < a.length; i++) {
   result.append( a[i] );
   //result.append( optional separator );
}
String mynewstring = result.toString();

23
StringBuffer가 오래되었습니다. 대신 한 스레드에서 사용하기 위해 불필요한 동기화가없는 StringBuilder를 사용하십시오.
Jason S

13

Java 8에서 생각하는 가장 간단한 방법은 다음과 같습니다.

    String[] array = { "cat", "mouse" };
    String delimiter = "";
    String result = String.join(delimiter, array);

이런 식으로 임의의 구분자를 선택할 수 있습니다.


10

Arrays.deepToString 메서드를 사용해보십시오 .

지정된 배열의 "심층 내용"의 문자열 표현을 리턴합니다. 배열에 다른 배열이 요소로 포함되어 있으면 문자열 표현에 내용 등이 포함됩니다. 이 방법은 다차원 배열을 문자열로 변환하기 위해 설계되었습니다


많은 제어가 필요하지 않은 경우 타사 라이브러리가 필요하지 않기 때문에 이것이 가장 간단한 솔루션이라고 생각합니다. 예제는 다음과 같습니다. System.out.println (Arrays.deepToString (args));
neves 필요

7

Arrays.toString 오버로드 된 메소드를 시도하십시오 .

그렇지 않으면 일반적인 구현에서 다음을 시도하십시오.

public static void main(String... args) throws Exception {

    String[] array = {"ABC", "XYZ", "PQR"};

    System.out.println(new Test().join(array, ", "));
}

public <T> String join(T[] array, String cement) {
    StringBuilder builder = new StringBuilder();

    if(array == null || array.length == 0) {
        return null;
    }

    for (T t : array) {
        builder.append(t).append(cement);
    }

    builder.delete(builder.length() - cement.length(), builder.length());

    return builder.toString();
}

그런 다음 원하는 형식을 알려주십시오. 그렇지 않으면, 당신이 생각하고있는 것을 추측 할 수 없습니다.
Jason S

3

다음은 배열에서 문자열로 변환하는 예입니다.

    공개 클래스 ArrayToString
    {
공공 정적 무효 메인 (문자열 [] 인수) { String [] strArray = new String [] { "Java", "PHP", ".NET", "PERL", "C", "COBOL"};

        String newString = Arrays.toString(strArray);

        newString = newString.substring(1, newString.length()-1);

        System.out.println("New New String: " + newString);
    }
}


1
String[] strings = new String[25000];
for (int i = 0; i < 25000; i++) strings[i] = '1234567';

String result;
result = "";
for (String s : strings) result += s;
//linear +: 5s

result = "";
for (String s : strings) result = result.concat(s);
//linear .concat: 2.5s

result = String.join("", strings);
//Java 8 .join: 3ms

Public String join(String delimiter, String[] s)
{
    int ls = s.length;
    switch (ls)
    {
        case 0: return "";
        case 1: return s[0];
        case 2: return s[0].concat(delimiter).concat(s[1]);
        default:
            int l1 = ls / 2;
            String[] s1 = Arrays.copyOfRange(s, 0, l1); 
            String[] s2 = Arrays.copyOfRange(s, l1, ls); 
            return join(delimiter, s1).concat(delimiter).concat(join(delimiter, s2));
    }
}
result = join("", strings);
// Divide&Conquer join: 7ms

선택의 여지가 없지만 Java 6 또는 7을 사용하려면 Divide & Conquer join을 사용해야합니다.


0

arrayList에서 문자열을 생성하는 코드를 원합니다.

Iterate through all elements in list and add it to your String result

결과로 문자열 사용 또는 StringBuffer / StringBuilder의 두 가지 방법으로이 작업을 수행 할 수 있습니다.

예:

String result = "";
for (String s : list) {
    result += s;
}

...하지만 성능상의 이유로이 방법은 좋지 않습니다. 더 나은가 사용하는 StringBuffer를 (스레드 안전) 또는 StringBuilder에 문자열을 추가로 더 적합하는



-1
String array[]={"one","two"};
String s="";

for(int i=0;i<array.length;i++)
{
  s=s+array[i];
}

System.out.print(s);

1
당신의 대답은 기본적으로 smas와 같습니다; 조금 더 복잡합니다. 따라서 "가장 쉬운"것은 아닙니다. 게다가 Arrays.toString ()이 더 쉽습니다.
GhostCat

-22

배열에 얼마나 많은 요소가 있는지 아는 경우 간단한 방법은 다음과 같습니다.

String appendedString = "" + array[0] + "" + array[1] + "" + array[2] + "" + array[3]; 

10
그것은 현실에서는 거의 적용되지 않으며 나쁜 프로그래밍 관행을 보여줍니다.
Jk1

3
-50 부정적인을 달성 금메달 수
파블로 Cegarra
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.