문제

나는 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와 같은 래퍼 클래스를 구축하는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top