C # String.Format () 및 String.Join ()에 해당하는 Java
나는 약간의 약간의 질문이라는 것을 알고 있다고 Java에서 C #의 많은 연산과 동등한 것이 있습니까?
특히에 대해 이야기 String.Format
하고 String.Join
있습니다.
자바 문자열에는 object- 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 에서 온 것입니다 .
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;
그것은 매우 비효율적이며 나쁜 습관이지만 수천 개의 문자열이 있거나 이것이 거대한 루프 안에 있거나 코드가 실제로 성능에 중요하지 않는 한 인식 할 수있는 것은 없습니다.
더 중요한 것은 기억하기 쉽고 짧고 빠르며 매우 읽기 쉽다는 것입니다. 디자인 선택에서 성능이 항상 자동 승자가되는 것은 아닙니다.
여기에 아주 간단한 대답이 있습니다. +=
코드가 적기 때문에 사용 하고 최적화 프로그램이이를 a로 변환하도록하십시오 StringBuilder
. 이 방법을 사용하면 루프에서 "마지막 상태"검사를 수행 할 필요가 없으며 (성능 향상) 끝에 구분 기호를 제거하는 것에 대해 걱정할 필요가 없습니다.
Iterator<String> iter = args.iterator();
output += iter.hasNext() ? iter.next() : "";
while (iter.hasNext()) {
output += "," + iter.next();
}
간단한 조인 기능을 추가하기 위해 전체 Apache 라이브러리를 가져오고 싶지 않았으므로 여기에 내 해킹이 있습니다.
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();
}
}
여러 문자열을 하나로 결합 (연결)하려면 StringBuilder를 사용해야합니다. 사용하는 것보다 훨씬 낫습니다.
for(String s : joinMe)
target += s;
StringBuilder는 동기화를 사용하지 않기 때문에 StringBuffer보다 약간의 성능 향상이 있습니다.
이와 같은 범용 유틸리티 메서드의 경우 (결국) 여러 상황에서 여러 번 호출되므로 효율적으로 만들고 많은 임시 개체를 할당하지 않아야합니다. 우리는 많은 다양한 Java 앱을 프로파일 링했으며 거의 항상 문자열 연결 및 문자열 / char [] 할당이 상당한 시간 / 메모리를 차지한다는 사실을 발견했습니다.
재사용 가능한 컬렉션-> 문자열 메서드는 먼저 필요한 결과의 크기를 계산 한 다음 해당 초기 크기로 StringBuilder를 만듭니다. 이것은 문자열을 추가 할 때 사용되는 내부 char []의 불필요한 두 배 / 복사를 방지합니다.
나는 직접 썼다.
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();
}
하지만 Collection
JSP에서 지원하지 않으므로 태그 기능에 대해 다음과 같이 썼습니다.
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, ", ")}
StringUtils 는 Apache Commons Lang 라이브러리에서 매우 유용한 클래스입니다.
이 MessageFormat.format()
C 번호의처럼 작동한다 String.Format()
.
여기에 String.Join의 지나치게 복잡한 구현이 많이 있습니다. Java 1.8이없고 새 라이브러리를 가져 오지 않으려는 경우 아래 구현으로 충분합니다.
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
'IT' 카테고리의 다른 글
CoffeeScript를 사용하여 객체에 키가 있는지 확인하는 가장 간단한 방법 (0) | 2020.08.03 |
---|---|
확장 메소드는 동적으로 디스패치 할 수 없습니다 (0) | 2020.08.03 |
디자인 타임에 변수를 사용하여 선언 된 변수를 어떻게 안정적으로 확인할 수 있습니까? (0) | 2020.08.03 |
PHP에서 POST를 통해 동일한 이름을 가진 여러 입력 (0) | 2020.08.03 |
SQL이 null이고 = null (0) | 2020.08.02 |