Java에서 지정된 수의 지정된 문자로 문자열을 만드는 방법이 있습니까? 필자의 경우 공백이 10 개인 문자열을 만들어야합니다. 내 현재 코드는 다음과 같습니다
StringBuffer outputBuffer = new StringBuffer(length);
for (int i = 0; i < length; i++){
outputBuffer.append(" ");
}
return outputBuffer.toString();
같은 것을 성취하는 더 좋은 방법이 있습니까? 특히 나는 (실행 측면에서) 빠른 것을 원합니다.
답변
for 루프는 컴파일러에 의해 최적화됩니다. 당신과 같은 경우에는 스스로 최적화 할 필요가 없습니다. 컴파일러를 신뢰하십시오.
BTW, n 개의 공백 문자로 문자열을 만드는 방법이 있다면 방금했던 것과 같은 방식으로 코딩됩니다.
답변
String
API를 사용하는 가장 짧은 코드는 다음과 같습니다.
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;