2012-10-13 4 views
1

나는 문자열 표현을 직렬화하거나 만들 필요가있는 List<String>입니다.리스트의 문자열 표현 <String>리스트

myList.add("Bob"); 
myList.add("account"); 
myList.add("userId"); 

이 목록에있는 항목의 변수 수를 포함 할 수 있으며, 나는이 양식에 연재 될 필요 : 예를 들어

내가 가진

\Bob\-\account\-\userId\ 

내가 좋아하는 루프를 수행 할 수 있습니다

String ss; 

for (String s: myList) { 
    s = "\\" + s + "\\"; 
    ss = s + "-"; 
} 

는 그러나을 결과의 꼬리에 "-"가있을 것입니다

이미 Google 구아바 기능이 있습니까?

답변

5

쉽게 Apaches Commons StringUtils를 사용할 수 있습니다

String ss = "\\" + StringUtils.join(myList.iterator(), "\\-\\") + "\\"; 
0

당신처럼 루프를 변경하여 문제를 해결할 수 있습니다

String ss = ""; 

for (String s: myList) { 
    s = "\\" + s + "\\"; 
    if(ss.equals("")) { 
     ss = s; 
    } 
    else { 
     ss += " - " + s; 
    } 
} 
0

아마도 다른 솔루션은 목록의 크기를 기준으로하는 루프 구식이다().

문자열을 연결하는 것보다 더 효율적이므로 StringBuffer를 사용하는 것이 좋습니다. 내부적으로 String을 연결할 때, 객체는 파괴되고 다시 생성됩니다. StringBuffer를 출력에 다음

int myListSize = myList.size(); 
StringBuffer ss = new StringBuffer(4); 
for (int i=0; i < myListSize; i++) { 
    ss.append("\\").append(myList.get(i)).append("\\"); 
    if (i < myListSize - 1) { 
     ss.append("-"); 
    } 
} 

는 :

ss.toString(); 

는 개인적으로 나는 쉽게 읽을 수있는 끝 (위와 같이) 루프에 대한 이러한 생각합니다.

+0

나는 Apache Commons Lang StringUtils를 권장하는 다른 포스터에 동의합니다. 그 클래스를 사용하는 것에 별 신경 쓰지 않는다면 매우 편리합니다. – TheRocketSurgeon

1

첫째,이 같은 회씩 연결하는 동안 모두 StringBuilder를 사용하는 것이 좋습니다.

ss = "\\" + StringUtils.join(myList.iterator(), "\\-\\") + "\\"; 
+0

BTW 구아바는 [조이너] (https://guava-libraries.googlecode.com/svn-history/r13/trunk/javadoc/com/google/common/base/Joiner.html)를 제공합니다. StringUtils 클래스 –

+0

오! @ coding.mof 링크에 감사드립니다. – Vikdor

7

하여 사용 구아바 : : 문자열이 있음을 접합

String s = Joiner.on('-').join(Iterables.transform(list, new Function<String, String>() { 
    @Override 
    public String apply(String input) { 
     return "\\" + input + "\\"; 
    } 
}); 
+1

크리스토프의 솔루션은 변형 된 제품인 많은 임시 문자열이나 컴파일러가 생성 한 많은 쓰레기를 사용하는 것처럼 더 나을 것 같습니다. StringBuilder – cporte

+3

성능에 대해 동의하지만 실제로는 중요하지 않습니다. 원하는 솔루션이 백 슬래시로 묶인 대시로 구분 된 문자열이라는 사실을 더 잘 반영하기 때문에 내 솔루션이 더 논리적임을 알 수 있습니다. –

+0

+1 구아바 대안을 알기 위해 +1하지만 아파치가 더 깨끗하게 보임. – exexzian

0

간단한 코드를 다음과 같이

둘째, 동일한을 달성하기 위해 아파치 공통 랭의 StringUtils.join()`방법을 사용할 수 있습니다 나는 다음과 같이 알고있다 :

String sep = "", out = ""; 
for (String s : myList) { 
    out += sep + '\\' + s + '\\'; 
    sep = "-"; 
} 
+0

그런 루프에 추가 할 때는 항상'StringBuilder'를 사용해야합니다. – ColinD

6

구아바를 사용하여 이것을 해결하는 간단한 방법은이다.:

System.out.println("\\" + Joiner.on("\\-\\").join(myList) + "\\"); 
+0

그래, 그건 내가 권하고 싶은거야. – ColinD