n 개의 문자로 문자열 만들기 문자로 문자열을 만드는 방법이

Java에서 지정된 수의 지정된 문자로 문자열을 만드는 방법이 있습니까? 필자의 경우 공백이 10 개인 문자열을 만들어야합니다. 내 현재 코드는 다음과 같습니다

StringBuffer outputBuffer = new StringBuffer(length);
for (int i = 0; i < length; i++){
   outputBuffer.append(" ");
}
return outputBuffer.toString();

같은 것을 성취하는 더 좋은 방법이 있습니까? 특히 나는 (실행 측면에서) 빠른 것을 원합니다.



답변

for 루프는 컴파일러에 의해 최적화됩니다. 당신과 같은 경우에는 스스로 최적화 할 필요가 없습니다. 컴파일러를 신뢰하십시오.

BTW, n 개의 공백 문자로 문자열을 만드는 방법이 있다면 방금했던 것과 같은 방식으로 코딩됩니다.


답변

StringAPI를 사용하는 가장 짧은 코드는 다음과 같습니다.

String space10 = new String(new char[10]).replace('\0', ' ');

System.out.println("[" + space10 + "]");
// prints "[          ]"

직접 인스턴스화하지 않고 방법으로 char:

import java.nio.CharBuffer;

/**
 * Creates a string of spaces that is 'spaces' spaces long.
 *
 * @param spaces The number of spaces to add to the string.
 */
public String spaces( int spaces ) {
  return CharBuffer.allocate( spaces ).toString().replace( '\0', ' ' );
}

다음을 사용하여 호출하십시오.

System.out.printf( "[%s]%n", spaces( 10 ) );

답변

흠 이제 내가 생각할 것입니다 Arrays.fill.

char[] charArray = new char[length];
Arrays.fill(charArray, ' ');
String str = new String(charArray);

물론, fill메소드가 코드와 동일한 작업을 수행 한다고 가정 하므로 아마도 거의 동일하게 수행되지만 최소한 줄 수는 적습니다.


답변

나는 루프를 손으로 쓰지 말 것을 강력히 권합니다. 당신은 프로그래밍 경력 동안 반복해서 그렇게 할 것입니다. 코드를 읽는 사람들은-당신을 포함하여-루프의 의미를 소화하기 위해 몇 초 만에 시간을 투자해야합니다.

대신 재사용 만 수행하는 코드를 제공하는 사용 가능한 라이브러리 중 하나 같은 StringUtils.repeat에서 아파치 코 몬즈 랭 :

StringUtils.repeat(' ', length);

그렇게하면 성능에 신경 쓰지 않아도되므로 StringBuilder컴파일러 최적화 등 의 모든 세부 사항 이 숨겨집니다. 함수가 느리게 나오면 라이브러리의 버그 일 것입니다.

자바 (11) 가 더 쉽게된다 :

" ".repeat(length);

답변

Java 8에서는 다음을 사용할 수 있습니다 String.join.

String.join("", Collections.nCopies(n, s));

답변

공백 만 원하면 어떻습니까?

String spaces = (n==0)?"":String.format("%"+n+"s", "");

abs (n) 공백이 발생합니다.


답변

Java 11 이후 :

" ".repeat(10);

Java 8 부터 :

generate(() -> " ").limit(10).collect(joining());

어디:

import static java.util.stream.Collectors.joining;
import static java.util.stream.Stream.generate;