programing

C# String과 동등한 Java.Format() 및 String.참가()

goodsources 2022. 9. 5. 23:22
반응형

C# String과 동등한 Java.Format() 및 String.참가()

조금 초보적인 질문인 것은 알지만 자바에서 C#의 문자열 연산에 해당하는 것이 있습니까?

아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 네.String.Format ★★★★★★★★★★★★★★★★★」String.Join.

에는 Java String " " 가 있습니다.format.5 의 경우), 단 no(1.5 시점의 경우), nojoin★★★★★★ 。

아직 포함되지 않은 유용한 String 유틸리티 메서드를 많이 가져오려면 org.apache.commons.lang을 사용합니다.String Utils.

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 에서 입수했습니다.

구아바클래스에 포함되어 있습니다.

import com.google.common.base.Joiner;

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

의 경우 Java 8의 경우join()는 String 클래스의 2개의 클래스 메서드로 사용할 수 있게 되었습니다.두 경우 모두 첫 번째 인수는 딜리미터입니다.

개개의 를 추가 인수로 전달할 수 있습니다.

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

또는 다음을 통과시킬 수 있습니다.

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 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"

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

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

  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이 걸리더라도 문제가 되지 않습니다.따라서 기존 문자열 "target"에 추가하는 "joinMe"라는 컬렉션이 있다면 인라인화만 해도 문제가 되지 않습니다.

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

이것은 매우 비효율적입니다(또한 나쁜 습관입니다만, 수천 개의 문자열이 있거나, 이것이 큰 루프 안에 있거나, 코드의 퍼포먼스가 매우 중요한 경우가 아니면, 아무것도 인식할 수 없습니다.

더 중요한 것은, 기억하기 쉽고, 짧고, 빠르고, 매우 읽기 쉽다는 것입니다.퍼포먼스가 설계 선택의 자동 승자는 아닙니다.

여기 꽤 간단한 답이 있다.+=됩니다.StringBuilder에서 '(퍼포먼스 되고 이 방법을 사용하면 루프 내에서 "마지막" 체크(퍼포먼스 향상)를 수행할 필요가 없습니다.또, 마지막에 딜리미터를 떼어낼 염려도 없습니다.

        Iterator<String> iter = args.iterator();
        output += iter.hasNext() ? iter.next() : "";
        while (iter.hasNext()) {
            output += "," + iter.next();
        }

Apache 라이브러리 전체를 Import하여 간단한 join 기능을 추가하고 싶지는 않았습니다만, 여기 제 해킹이 있습니다.

    public String join(String delim, List<String> destinations) {
        StringBuilder sb = new StringBuilder();
        int delimLength = delim.length();

        for (String s: destinations) {
            sb.append(s);
            sb.append(delim);
        }

        // we have appended the delimiter to the end 
        // in the previous for-loop. Let's now remove it.
        if (sb.length() >= delimLength) {
            return sb.substring(0, sb.length() - delimLength);
        } else {
            return sb.toString();
        }
    }

여러 문자열을 하나로 결합(연결)하는 경우 String Builder를 사용해야 합니다.사용하는 것보다 훨씬 낫다

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

String Builder는 동기화를 사용하지 않기 때문에 String Buffer에 대해서도 약간의 퍼포먼스가 있습니다.

이와 같은 범용 유틸리티 메서드의 경우 많은 상황에서 (결국) 여러 번 호출되므로 효율적으로 하고 많은 과도 개체를 할당하지 않아야 합니다.다양한 Java 앱을 프로파일링해 보면 문자열 연결과 문자열/char[] 할당이 상당한 시간/메모리를 차지한다는 것을 알 수 있습니다.

이 재사용 가능한 컬렉션 -> 문자열 메서드는 처음에 필요한 결과의 크기를 계산한 후 해당 초기 크기의 String Builder를 만듭니다.이것에 의해, 문자열을 추가할 때에 사용되는 내부 문자가 불필요하게 2배가 되어 복사되는 것을 피할 수 있습니다.

내가 직접 썼어:

public static String join(Collection<String> col, String delim) {
    StringBuilder sb = new StringBuilder();
    Iterator<String> iter = col.iterator();
    if (iter.hasNext())
        sb.append(iter.next().toString());
    while (iter.hasNext()) {
        sb.append(delim);
        sb.append(iter.next().toString());
    }
    return sb.toString();
}

그렇지만CollectionJSP에서는 지원되지 않기 때문에 태그 기능에 대해 다음과 같이 기재했습니다.

public static String join(List<?> list, String delim) {
    int len = list.size();
    if (len == 0)
        return "";
    StringBuilder sb = new StringBuilder(list.get(0).toString());
    for (int i = 1; i < len; i++) {
        sb.append(delim);
        sb.append(list.get(i).toString());
    }
    return sb.toString();
}

을 에 넣다.tld파일:

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee"
    <function>
        <name>join</name>
        <function-class>com.core.util.ReportUtil</function-class>
        <function-signature>java.lang.String join(java.util.List, java.lang.String)</function-signature>
    </function>
</taglib>

JSP 파일에서 다음과 같이 사용합니다.

<%@taglib prefix="funnyFmt" uri="tag:com.core.util,2013:funnyFmt"%>
${funnyFmt:join(books, ", ")}

String Utils는 Apache Commons Lang 라이브러리에서 매우 유용한 클래스입니다.

C#과 같은 기능을 하는 것이 있습니다.String.Format().

String의 구현은 매우 복잡합니다.여기에 가입하세요.Java 1.8이 없고 새로운 라이브러리를 Import하고 싶지 않은 경우 다음 구현으로 충분합니다.

public String join(Collection<String> col, String delim) {
    StringBuilder sb = new StringBuilder();
    for ( String s : col ) {
        if ( sb.length() != 0 ) sb.append(delim);
        sb.append(s);
    }
    return sb.toString();
}
ArrayList<Double> j=new ArrayList<>; 
j.add(1);
j.add(.92);
j.add(3); 
String ntop=j.toString(); //ntop= "[1, 0.92, 3]" 

따라서 기본적으로 String ntop은 전체 컬렉션의 값을 쉼표 구분 기호와 대괄호로 저장합니다.

문자열 연결 연산자 "+"를 사용하여 두 문자열을 연결합니다. s1 += s2;

언급URL : https://stackoverflow.com/questions/187676/java-equivalents-of-c-sharp-string-format-and-string-join

반응형