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();
}
그렇지만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, ", ")}
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
'programing' 카테고리의 다른 글
NaN 유형이 '번호'를 반환하는 이유는 무엇입니까? (0) | 2022.09.05 |
---|---|
문자열의 마지막 문자를 얻으려면 어떻게 해야 하나요? (0) | 2022.09.05 |
HTML5에서 비디오 재생 속도를 변경하는 방법 (0) | 2022.09.05 |
JavaScript를 사용하여 요소의 클래스를 변경하려면 어떻게 해야 합니까? (0) | 2022.09.05 |
자바에서 두 날짜의 차이를 찾는 방법은 무엇입니까? (0) | 2022.09.05 |