Java에서 String []을 쉼표로 구분 된 문자열로 변환


109

내가 하나가 String[]

String[] name = {"amit", "rahul", "surya"};

IN 절 내부의 SQL 쿼리에서 이름을 매개 변수로 보내고 싶습니다. 어떻게 형식으로 변환합니까?

'amit','rahul','surya'

18
어떨까요String[] name = {"O'Neill"};
Bart Kiers 2011

답변:


31
if (name.length > 0) {
    StringBuilder nameBuilder = new StringBuilder();

    for (String n : name) {
        nameBuilder.append("'").append(n.replace("'", "\\'")).append("',");
        // can also do the following
        // nameBuilder.append("'").append(n.replace("'", "''")).append("',");
    }

    nameBuilder.deleteCharAt(nameBuilder.length() - 1);

    return nameBuilder.toString();
} else {
    return "";
}

10
그럼 나는 많은 수표를 썼을 것입니다. 나는 단지 개념을 설명하고 있으며 모든 것을 저장하는 예제를 제공하지 않습니다.
Nico Huysamen 2011

3
다시 말하지만, 개념 ... 그리고 반대 투표에 감사드립니다. 그러나 거기에 그것을 고쳤습니다.
Nico Huysamen 2011

덕분에 내 하루 저장을 버디하지만 내가 그 상황을 얻을 수 있기 때문에 당신은 또한 @Bart Kiers의 대답을 줄 수없는 마음을하고 있다면 내가 PLZ 프로그래밍에 새로운 오전
디팍 쿠마

7
Ohhh, 단순히 String.join(...)또는 사용할 수 있다면 왜 그렇게 많은 소스 행을 작성해야 TextUtils.join(...)합니까?
Eugene Brusov

2
@EugeneBrusov Java 8 출시 이전에 2011 년에 답변이 게시 되었기 때문에 추측
하겠습니다

211

간단한 방법을 직접 작성하거나 다양한 유틸리티 중 하나를 사용하십시오.

개인적으로 나는 아파치 StringUtils ( StringUtils.join )를 사용합니다.

편집 : Java 8에서는 더 이상 필요하지 않습니다.

String joined = String.join(",", name);

3
바로 그거죠! 자신 만의 구분 기호를 정의 할 수도 있습니다.StringUtils.join(names,',');
insanity

5
String list = "'" + StringUtils.join(names,"','") + "'";이것은 SQL 요청에 필요한 작은 따옴표를 제공합니다.
haysclark 2016

안드로이드 :TextUtils.join(",", stringArrayOfEmails)
Pratik Butani



47
StringBuilder sb = new StringBuilder();
for (String n : name) { 
    if (sb.length() > 0) sb.append(',');
    sb.append("'").append(n).append("'");
}
return sb.toString();

1
@Bmoeller 시도해 보셨습니까 TextUtils.join(...)? 한 줄 코드가 다섯 줄보다 더 좋고 간단하다고 생각합니다.
Eugene Brusov

27

org.apache.commons.lang.StringUtilsAPI를 사용 하여 Java의 문자열 배열에서 쉼표로 구분 된 결과를 형성 할 수도 있습니다 .

StringUtils.join(strArr,",");


9

이미 Spring Framework를 종속성으로 가지고 있다면 매우 간단한 util 메서드를 사용할 수도 있습니다.

org.springframework.util.StringUtils.arrayToCommaDelimitedString(String[] array)

7

Guava 라이브러리를 사용하여 단순화 할 수도 있습니다.

String[] name = {"amit", "rahul", "surya"};
String str = "'" + Joiner.on(",").skipNulls().join(name)
    .replace(",", "','") + "'";

출력이 다음과 같은 경우 Guava 라이브러리를 어떻게 사용 "amit,rahul,surya"합니까?
Compaq LE2202x

5

StringBuilderString []을 사용 하고 반복하고 각 문자열을 추가합니다.

public static String convert(String[] name) { 
    StringBuilder sb = new StringBuilder();
    for (String st : name) { 
        sb.append('\'').append(st).append('\'').append(',');
    }
    if (name.length != 0) sb.deleteCharAt(sb.length()-1);
    return sb.toString();
}

4

한 줄의 코드로이 작업을 수행 할 수 있습니다.

Arrays.toString(strings).replaceAll("[\\[.\\].\\s+]", "");

3
String[] name = {"amit", "rahul", "surya"};


public static String arrayToString(String array[])
{
    if (array.length == 0) return "";
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < array.length; ++i)
    {
        sb.append(",'").append(array[i]).append("'");
    }
    return sb.substring(1);
}

2
당신은 아마 의미 substring(1)했지만, 만약에 array.length == 0?
Bart Kiers 2011

2

나는 이것을 사용한다

public static String convertToCommaSeparated(String[] strings) {
    StringBuffer sb = new StringBuffer("");
    for (int i = 0; strings != null && i < strings.length; i++) {
        sb.append(strings[i]);
        if (i < strings.length - 1) {
            sb.append(',');
        }
    }
    return sb.toString();
}

1

사용 StringUtils.join기능 : 예

String myCsvString = StringUtils.join(myList, ",")

1
이전에 여러 번 게시 된 답변을 게시하는 이유는 무엇입니까?
Charles Goodwin

1
String[] paramIdIdList={"P001","P002","P003"};

StringBuilder builder = new StringBuilder();
            for(String paramId : paramIdIdList) {
                builder.append(paramId+",");
            }
            builder.deleteCharAt(builder.length() -1);
            String paramIds = builder.toString();
System.Out.Println(paramIds );

코드가 정확히 수행하는 작업에 대한 설명을 추가하십시오.
Hille

String []을 쉼표로 구분 된 문자열로 변환
Vinayak

귀하의 대답에는 올바른 코드가 있음을 알고 있기 때문입니다. 그 이상도 이하도 아니지만 도움이되지 않습니다.
Hille

1

코드와 유혹과 "쿨"이 나타날 수 있으므로 사용하지 않는 fold또는reduce 이들의 고통 바와 같이, 문자열의 큰 컬렉션에 문자열 연결 문제

String[] strings = { "foo", "bar", "baz" };
Optional<String> result = Arrays.stream(strings)
        .reduce((a, b) -> String.format("%s,%s", a, b));
System.out.println(result.get());

대신 다른 답변에 따라 String.join()이미 컬렉션이있는 경우 사용 하거나 StringBuilder그렇지 않은 경우 사용하십시오.


0
String newNameList=null;

 for(int i = name.length;i>=0;i--){
    if(newNameList==null){
        newNameList = "\'" + name[name.length - i] + "\'";
    }
    else{
        newNameList += ",\'" + name[name.length - i] + "\'";
    }
}

0

이러한 간단한 작업을 위해 StringBuilder를 생성하지 않을 수도 있습니다. 콘텐츠 적합성을 위해 배열 이름이름 에서 이름 으로 변경했습니다 .

String[] names = {"amit", "rahul", "surya"};

String namesString = "";
int delimeters = (names.size() - 1);
for (String name : names)
    namesString += (delimeters-- > 0) ? "'" + name + "'," : "'" + name + "'";

0

for () 루프의 세로 간격에 신경 쓰지 않는다면 두 줄 (선언 제외; 'finalstring'은 처음에는 빈 문자열과 동일하게 선언되어야합니다) :

for (int i = 0; i<string_array.length; i++) {finalstring += string_array[i]+",";}
finalstring = finalstring.substring(0,finalstring.length()-1);

두 줄이면 끝났습니다. :)


0

다음은 배열을 분할하고 사용자 지정 구분 기호를 입력하는 유틸리티 방법입니다.

String.replace(String,String)
Arrays.toString(Object[])

여기있어 :

public static String toString(String delimiter, Object[]array){
    String s = "";

    // split array
    if (array != null && array.length > 0) {
        s = Arrays.toString(array).replace("[", "").replace("]", "");
    }

    // place delimiter (notice the space in ", ")
    if(delimiter != null){
        s = s.replace(", ", delimiter);
    }

    return s;
}

두 번째 인수 유형을 배열 유형에 맞게 변경하십시오.


0

이것은 최적화 된 방법입니다.

StringBuilder sb = new StringBuilder();
for (String n : arr) { 
    sb.append("'").append(n).append("',");
}
if(sb.length()>0)
    sb.setLength(sbDiscrep.length()-1);
return sb.toString();

0

이전 Java 8 솔루션에 대한 확장

String result = String.join(",", name);

배열 값에 접두사 또는 / 및 접미사가 필요한 경우

 StringJoiner joiner = new StringJoiner(",");
 for (CharSequence cs: name) {
     joiner.add("'" + cs + "'");
 }
 return joiner.toString();

또는 간단한 방법 개념

  public static String genInValues(String delimiter, String prefix, String suffix, String[] name) {
    StringJoiner joiner = new StringJoiner(delimiter);
    for (CharSequence cs: name) {
      joiner.add(prefix + cs + suffix);
    }
    return joiner.toString();
  }

예를 들면

For Oracle i need "id in (1,2,3,4,5)" 
then use genInValues(",", "", "", name);
But for Postgres i need "id in (values (1),(2),(3),(4),(5))"
then use genInValues(",", "(", ")", name);

-1

이것은 도움이 될 것입니다 !!!

private static String convertArrayToString(String [] strArray) {
            StringBuilder builder = new StringBuilder();
            for(int i = 0; i<= strArray.length-1; i++) {
                if(i == strArray.length-1) {
                    builder.append("'"+strArray[i]+"'");
                }else {
                    builder.append("'"+strArray[i]+"'"+",");
                }
            }
            return builder.toString();
        }

3
답변에 대한 컨텍스트를 제공하십시오.
Matthieu Brucher
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.