Java : StringBuffer & Concatenation
-
02-07-2019 - |
문제
나는 Java의 StringBuffer를 사용하여 문자열을 함께 연결합니다.
StringBuffer str = new StringBuffer();
str.append("string value");
메소드가 있는지 (문서에서 빠른 한 눈에 찾지 못했지만) "패딩"을 추가하는 다른 방법이 있는지 알고 싶습니다.
설명하겠습니다. 문자열에 무언가를 추가 할 때마다 결국 공간을 추가하고 싶습니다.
String foo = "string value";
str.append(foo + " ");
그리고 나는 몇 가지 부여를 요구합니다. 그리고 매번, 나는 공간을 추가하고 싶습니다. 객체를 설정하여 각 부록 후에 공간을 자동으로 추가 할 수 있도록 객체를 설정하는 방법이 있습니까?
편집하다 --
String input
StringBuffer query = new StringBuffer();
Scanner scanner = new Scanner(System.in);
scanner.UseDelimiter("\n");
do {
System.out.println("sql> ");
input = scanner.next();
if (!empty(input)) query.append(input);
if (query.toString().trim().endsWith(";")) {
//run query
}
}
while (!input.equalsIgnoreCase("exit");
Grom이 제안한대로 StringBuilder를 사용하겠습니다. 그러나 이것이 코드가 지금 보이는 방식입니다.
해결책
나는 이것이 헬퍼 방법 (테스트되지 않은 코드)으로 더 쉽게 처리된다고 생각합니다.
public String myMethod() {
StringBuilder sb = new StringBuilder();
addToBuffer(sb, "Hello").addToBuffer("there,");
addToBuffer(sb, "it").addToBuffer(sb, "works");
}
private StringBuilder addToBuffer(StringBuilder sb, String what) {
return sb.append(what).append(' '); // char is even faster here! ;)
}
또는 유창한 인터페이스 (테스트되지 않은 코드)가있는 빌더 패턴을 사용하더라도 :
public String myMethod() {
SBBuilder builder = new SBBuilder()
.add("Hello").add("there")
.add("it", "works", "just", "fine!");
for (int i = 0; i < 10; i++) {
builder.add("adding").add(String.valueOf(i));
}
System.out.println(builder.build());
}
public static class SBBuilder {
private StringBuilder sb = new StringBuilder();
public SBBuilder add(String... parts) {
for (String p : parts) {
sb.append(p).append(' '); // char is even faster here! ;)
}
return this;
}
public String build() {
return sb.toString();
}
}
여기에 있습니다 기사 주제에.
도움이되기를 바랍니다! :)
다른 팁
당신은 사용해야합니다 StringBuilder.
가능한 경우,이 클래스는 대부분의 구현에서 더 빨리 StringBuffer를 선호하는 것이 좋습니다.
StringBuffer는 최종입니다. 당신은 그것에서 파생 할 수 없습니다. 가장 좋은 솔루션은 실제로 패딩을 직접 추가하는 것입니다. 메소드를 작성하고 패딩-스탠트를 사용하여 쉽게 변경하거나 매개 변수에 더 잘 넣을 수 있습니다.
주위를 감싸는 새로운 클래스를 만들 수 없을 수 있습니까? StringBuffer
그리고 추가하십시오 appendWithTrailingSpace()
방법?
CustomStringBuffer str = new CustomStringBuffer();
str.appendWithTrailingSpace("string value");
(방법을 조금 더 짧게 부르고 싶을 수도 있습니다.)
공간을 직접 추가하면 자신의 예에 따라 쉽게 쉽습니다.
또 다른 가능성은 StringBuilder 객체가 Append를 호출 할 때 스스로를 반환한다는 것입니다. 즉, 할 수 있습니다.
str.append("string value").append(" ");
매끄럽지는 않지만 + ""방법보다 쉬운 솔루션 일 것입니다.
또 다른 가능성은 동일한 방법을 제공하지만 상속 할 수 없기 때문에 원하는 패딩을 적용하는 PaddedStringBuilder와 같은 래퍼 클래스를 구축하는 것입니다.