[java] 자바에서 문자열을 반복하는 간단한 방법

나는 String n 번 반복 할 수있는 간단한 commons 메소드 또는 연산자를 찾고 있습니다 . 나는 for 루프를 사용하여 이것을 작성할 수 있다는 것을 알고 있지만 필요할 때마다 for 루프를 피하고 간단한 직접 방법이 어딘가에 있어야합니다.

String str = "abc";
String repeated = str.repeat(3);

repeated.equals("abcabcabc");

와 연관되다:

문자열 자바 스크립트
반복 주어진 횟수만큼 다른 문자열을 반복하여 NSString 생성

편집

루프가 완전히 필요하지 않은 경우 for 루프를 피하려고합니다.

  1. 그들은 다른 함수에 얽혀 있어도 코드 줄 수에 추가합니다.

  2. 내 코드를 읽는 사람은 for 루프에서 내가하는 일을 알아야합니다. 주석을 달고 의미있는 변수 이름을 가지고 있더라도 여전히 “영리한”작업을 수행하지 않아야합니다.

  3. 프로그래머는 for 루프에 영리한 것을 넣는 것을 좋아합니다. 비록 내가 의도 한 대로만 수행한다고하더라도 누군가가 와서 영리한 “수정”을 추가하는 것을 방해하지는 않습니다.

  4. 그들은 종종 잘못되기 쉽습니다. 인덱스와 관련된 루프는 하나의 버그로 생성되는 경향이 있습니다.

  5. For 루프는 종종 같은 변수를 재사용하므로 범위 지정 버그를 찾기가 매우 어려워집니다.

  6. For 루프는 버그 사냥꾼이 찾아야하는 장소의 수를 늘립니다.



답변

String::repeat

". ".repeat( 7 )  // Seven period-with-space pairs: . . . . . . . 

Java 11의 새로운 기능은String::repeat 요청한 내용을 정확하게 수행 하는 방법 입니다.

String str = "abc";
String repeated = str.repeat(3);
repeated.equals("abcabcabc");

자사의 자바 독은 말합니다 :

/**
 * Returns a string whose value is the concatenation of this
 * string repeated {@code count} times.
 * <p>
 * If this string is empty or count is zero then the empty
 * string is returned.
 *
 * @param count number of times to repeat
 *
 * @return A string composed of this string repeated
 * {@code count} times or the empty string if this
 * string is empty or count is zero
 *
 * @throws IllegalArgumentException if the {@code count} is
 * negative.
 *
 * @since 11
 */ 


답변

가장 짧은 버전은 다음과 같습니다 (Java 1.5 이상 필요).

repeated = new String(new char[n]).replace("\0", s);

n문자열을 반복하려는 횟수는 어디 이며 반복 할 문자열 s입니다.

가져 오기 또는 라이브러리가 필요하지 않습니다.


답변

Java <= 7을 사용하는 경우 다음과 같이 “간결”합니다.

// create a string made up of n copies of string s
String.format("%0" + n + "d", 0).replace("0", s);

에서 자바 8 위보다 읽기 쉬운 방법이있다 :

// create a string made up of n copies of string s
String.join("", Collections.nCopies(n, s));

마지막으로 Java 11 이상에서는 repeat​(int count)this ( link )를 위한 새로운 방법이 있습니다.

"abc".repeat(12);

또는 프로젝트에서 Java 라이브러리를 사용하는 경우 더 많은 옵션이 있습니다.

들어 아파치 코 몬즈 :

StringUtils.repeat("abc", 12);

대한 구글 구아바 :

Strings.repeat("abc", 12);


답변

Commons Lang StringUtils.repeat ()

용법:

String str = "abc";
String repeated = StringUtils.repeat(str, 3);

repeated.equals("abcabcabc");


답변

Java 8 String.join은 다음과 관련하여 깔끔한 방법을 제공합니다 Collections.nCopies.

// say hello 100 times
System.out.println(String.join("", Collections.nCopies(100, "hello")));


답변

표준 String 함수 만 사용하고 명시적인 루프를 사용하지 않는 방법은 다음과 같습니다.

// create a string made up of  n  copies of  s
repeated = String.format(String.format("%%%ds", n), " ").replace(" ",s);


답변

당신이 나와 같고 Apache Commons가 아닌 Google Guava를 사용하고 싶다면. Guava Strings 클래스에서 repeat 메소드를 사용할 수 있습니다 .

Strings.repeat("-", 60);