[java] C # String.Format () 및 String.Join ()의 Java 동등 물

나는 이것이 약간의 초보자 질문이라는 것을 알고 있지만 Java에서 C #의 문자열 작업과 동등한 것이 있습니까?

특히, 나는에 대해서 이야기하고 String.FormatString.Join.



답변

Java String 객체에는 format메소드 (1.5 기준)가 있지만 join메소드가 없습니다 .

아직 포함되지 않은 유용한 문자열 유틸리티 메소드를 얻으려면 org.apache.commons.lang.StringUtils를 사용할 수 있습니다 .


답변

String.format . 조인에 관해서는 직접 작성해야합니다.

 static String join(Collection<?> s, String delimiter) {
     StringBuilder builder = new StringBuilder();
     Iterator<?> iter = s.iterator();
     while (iter.hasNext()) {
         builder.append(iter.next());
         if (!iter.hasNext()) {
           break;
         }
         builder.append(delimiter);
     }
     return builder.toString();
 }

위의 출처는 http://snippets.dzone.com/posts/show/91입니다.


답변

구아바 와 함께 제공 클래스 .Joiner

import com.google.common.base.Joiner;

Joiner.on(separator).join(data);


답변

Java 8 join()부터는 이제 String 클래스에서 두 개의 클래스 메소드로 사용할 수 있습니다. 두 경우 모두 첫 번째 인수는 구분 기호입니다.

개별 CharSequence을 추가 인수로 전달할 수 있습니다 .

String joined = String.join(", ", "Antimony", "Arsenic", "Aluminum", "Selenium");
// "Antimony, Arsenic, Alumninum, Selenium"

또는 다음을 전달할Iterable<? extends CharSequence> 수 있습니다 .

List<String> strings = new LinkedList<String>();
strings.add("EX");
strings.add("TER");
strings.add("MIN");
strings.add("ATE");

String joined = String.join("-", strings);
// "EX-TER-MIN-ATE"

Java 8은 또한 다음 StringJoiner과 같이 사용할 수 있는 새 클래스를 추가합니다 .

StringJoiner joiner = new StringJoiner("&");
joiner.add("x=9");
joiner.add("y=5667.7");
joiner.add("z=-33.0");

String joined = joiner.toString();
// "x=9&y=5667.7&z=-33.0"


답변

TextUtils.join 은 Android에서 사용할 수 있습니다.


답변

다음과 같이 문자열에 변수 인수를 사용할 수도 있습니다.

  String join (String delim, String ... data) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < data.length; i++) {
      sb.append(data[i]);
      if (i >= data.length-1) {break;}
      sb.append(delim);
    }
    return sb.toString();
  }


답변

조인에 관해서는 이것이 조금 덜 복잡해 보일 수 있다고 생각합니다.

public String join (Collection<String> c) {
    StringBuilder sb=new StringBuilder();
    for(String s: c)
        sb.append(s);
    return sb.toString();
}

원하는만큼 Java 5 구문을 사용하지 못하므로 (믿거 나 말거나, 최근에 1.0.x를 사용하고 있습니다) 약간 녹슬었을 수 있지만 개념은 정확하다고 확신합니다. .

편집 추가 : 문자열 추가는 느려질 수 있지만 GUI 코드 또는 일부 단기 실행 루틴으로 작업하는 경우 .005 초 또는 .006이 걸리는지 여부는 실제로 중요하지 않으므로 “joinMe”라는 컬렉션이있는 경우 기존 문자열 “target”에 추가하려는 경우 다음과 같이 인라인하는 것이 끔찍하지 않습니다.

for(String s : joinMe)
    target += s;

그것은 매우 비효율적이며 나쁜 습관이지만 수천 개의 문자열이 있거나 이것이 거대한 루프 안에 있거나 코드가 실제로 성능에 중요하지 않으면 인식 할 수있는 것은 없습니다.

더 중요한 것은 기억하기 쉽고 짧고 빠르며 매우 읽기 쉽다는 것입니다. 디자인 선택에서 성능이 항상 자동 승자가되는 것은 아닙니다.