[java] 스칼라에서 java.String.format을 사용하는 방법은 무엇입니까?

.format문자열 의 메서드 를 사용하려고 합니다. 그러나 문자열에 % 1, % 2 등을 넣으면 혼란스러운 Java 소스 코드 조각을 가리키는 java.util.UnknownFormatConversionException이 발생합니다.

private void checkText(String s) {

    int idx;

    // If there are any '%' in the given string, we got a bad format
    // specifier.
    if ((idx = s.indexOf('%')) != -1) {
        char c = (idx > s.length() - 2 ? '%' : s.charAt(idx + 1));
        throw new UnknownFormatConversionException(String.valueOf(c));
    }
}

이것으로부터 나는 %숯이 금지 된다는 것을 이해합니다 . 그렇다면 인수 자리 표시 자에 무엇을 사용해야합니까?

스칼라 2.8을 사용 합니다.



답변

이전의 모든 응답은 정확하지만 모두 Java로되어 있습니다. 스칼라 예제는 다음과 같습니다.

val placeholder = "Hello %s, isn't %s cool?"
val formatted = placeholder.format("Ivan", "Scala")

또한 파이썬 연산자 처럼 유용하게 만드는format% 것에 대한 블로그 게시물 이 있습니다.


답변

위치를 나타 내기 위해 숫자를 사용할 필요는 없습니다. 기본적으로 인수의 위치는 단순히 문자열에 나타나는 순서입니다.

이것을 사용하는 올바른 방법의 예는 다음과 같습니다.

String result = String.format("The format method is %s!", "great");
// result now equals  "The format method is great!".

%메소드는 문자열을 표시하는 방법을 알려주기 위해 항상 뒤에 다른 문자를 사용합니다. %s아마도 가장 일반적 일 것입니다. 인수가 문자열로 취급되어야한다는 것을 의미합니다.

모든 옵션을 나열하지는 않지만 몇 가지 예를 제시하여 아이디어를 제공합니다.

// we can specify the # of decimals we want to show for a floating point:
String result = String.format("10 / 3 = %.2f", 10.0 / 3.0);
// result now equals  "10 / 3 = 3.33"

// we can add commas to long numbers:
result = String.format("Today we processed %,d transactions.", 1000000);
// result now equals  "Today we processed 1,000,000 transactions."

String.format옵션 만 사용 java.util.Formatter하려면 Formatter javadocs를 볼 수 있습니다 .

BalusC에서 언급했듯이 필요한 경우 기본 인수 순서를 변경할 수있는 설명서를 볼 수 있습니다. 그러나 아마도 당신이 이것을 원할 때 / 같은 시간을 두 번 이상 사용하는 경우 일 것입니다.


답변

소스 코드를 보지 않고 javadoc String.format ()Formatter 구문을 읽어야 합니다 .

% 뒤에 값의 형식을 지정합니다. 예를 들어 십진 정수의 경우는 d이고 문자열의 경우 다음과 s같습니다.

String aString = "world";
int aInt = 20;
String.format("Hello, %s on line %d",  aString, aInt );

산출:

Hello, world on line 20

시도한 것을 수행하려면 (인수 색인 사용) 다음을 사용하십시오 *n*$.

String.format("Line:%2$d. Value:%1$s. Result: Hello %1$s at line %2$d", aString, aInt );

산출:

Line:20. Value:world. Result: Hello world at line 20


답변

이것을 사용할 수 있습니다.

String.format("%1$s %2$s %2$s %3$s", "a", "b", "c");

산출:

abbc


답변

또한 Scala는 Predef에서 가져온 WrappedString으로의 암시 적 변환을 통해 여러 가지 방법으로 String을 확장하므로 다음을 수행 할 수도 있습니다.

val formattedString = "Hello %s, isn't %s cool?".format("Ivan", "Scala")


답변

공식 참조는 클래스 Formatter입니다.


답변

스칼라 2.10

val name = "Ivan"
val weather = "sunny"

s"Hello $name, it's $weather today!"