나는 이것이 약간의 초보자 질문이라는 것을 알고 있지만 Java에서 C #의 문자열 작업과 동등한 것이 있습니까?
특히, 나는에 대해서 이야기하고 String.Format
와 String.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입니다.
답변
답변
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;
그것은 매우 비효율적이며 나쁜 습관이지만 수천 개의 문자열이 있거나 이것이 거대한 루프 안에 있거나 코드가 실제로 성능에 중요하지 않으면 인식 할 수있는 것은 없습니다.
더 중요한 것은 기억하기 쉽고 짧고 빠르며 매우 읽기 쉽다는 것입니다. 디자인 선택에서 성능이 항상 자동 승자가되는 것은 아닙니다.