[SCALA] 더 나은 문자열 스칼라에 서식
SCALA더 나은 문자열 스칼라에 서식
너무 많은 인수가, 및 String.format는 너무 쉽게 혼동됩니다. 문자열을 포맷 할 수있는보다 강력한 방법이있다. 그래서 같이 :
"This is #{number} string".format("number" -> 1)
또는 때문에 유형의 문제로이 불가능합니다 (형식, 나는 생각지도 [문자열, 어떤]을해야합니다, 이것은 나쁜 일을 만들 것인지 모른다).
또는 다음과 같이 그 일을 더 나은 방법입니다 :
val number = 1
<plain>This is { number } string</plain> text
이 이름 공간을 오염에도 불구하고?
편집하다:
http://docs.python.org/release/3.1.2/library/string : 간단한의 포주가 많은 경우에 할 수도 있지만, 나는 또한 파이썬의 형식 () (참고로 같은 방향으로가는 뭔가를 찾고 있어요. HTML # formatstrings)
해결법
-
==============================
1.스칼라 2.10에서는 문자열 보간을 사용할 수 있습니다.
스칼라 2.10에서는 문자열 보간을 사용할 수 있습니다.
val height = 1.9d val name = "James" println(f"$name%s is $height%2.2f meters tall") // James is 1.90 meters tall
-
==============================
2.유일한 문제는보다 유연한 매개 변수의 순서를 만드는 경우 음은이 쉽게 수행 할 수 있습니다 :
유일한 문제는보다 유연한 매개 변수의 순서를 만드는 경우 음은이 쉽게 수행 할 수 있습니다 :
scala> "%d %d" format (1, 2) res0: String = 1 2 scala> "%2$d %1$d" format (1, 2) res1: String = 2 1
또한지도의 도움으로 정규식 교체있다 :
scala> val map = Map("number" -> 1) map: scala.collection.immutable.Map[java.lang.String,Int] = Map((number,1)) scala> val getGroup = (_: scala.util.matching.Regex.Match) group 1 getGroup: (util.matching.Regex.Match) => String = <function1> scala> val pf = getGroup andThen map.lift andThen (_ map (_.toString)) pf: (util.matching.Regex.Match) => Option[java.lang.String] = <function1> scala> val pat = "#\\{([^}]*)\\}".r pat: scala.util.matching.Regex = #\{([^}]*)\} scala> pat replaceSomeIn ("This is #{number} string", pf) res43: String = This is 1 string
-
==============================
3.아마 스칼라 - 강화 된 - 문자열 - 플러그인은 당신을 도울 수 있습니다. 이봐:
아마 스칼라 - 강화 된 - 문자열 - 플러그인은 당신을 도울 수 있습니다. 이봐:
스칼라 - 강화 된 - 문자열 - 플러그인 문서
-
==============================
4.당신은 쉽게 부자가 (포주 - 내 - 라이브러리 접근) 자신의 서식을 구현할 수 있습니다 :
당신은 쉽게 부자가 (포주 - 내 - 라이브러리 접근) 자신의 서식을 구현할 수 있습니다 :
scala> implicit def RichFormatter(string: String) = new { | def richFormat(replacement: Map[String, Any]) = | (string /: replacement) {(res, entry) => res.replaceAll("#\\{%s\\}".format(entry._1), entry._2.toString)} | } RichFormatter: (string: String)java.lang.Object{def richFormat(replacement: Map[String,Any]): String} scala> "This is #{number} string" richFormat Map("number" -> 1) res43: String = This is 1 string
-
==============================
5.이 응답 나는이 찾고있는 사람이 여기 온 :
이 응답 나는이 찾고있는 사람이 여기 온 :
"This is %s string".format(1)
-
==============================
6.당신은 2.10를 사용하는 경우 다음 보간에 내장과 함께 할 것입니다. 당신이 극단적 인 성능에 대해 신경 쓰지 및 기능 한 라이너를 두려워하지 않는 경우 그렇지 않으면, 당신은 + 여러 정규 표현식 검사를 접어 사용할 수 있습니다 :
당신은 2.10를 사용하는 경우 다음 보간에 내장과 함께 할 것입니다. 당신이 극단적 인 성능에 대해 신경 쓰지 및 기능 한 라이너를 두려워하지 않는 경우 그렇지 않으면, 당신은 + 여러 정규 표현식 검사를 접어 사용할 수 있습니다 :
val template = "Hello #{name}!" val replacements = Map( "name" -> "Aldo" ) replacements.foldLeft(template)((s:String, x:(String,String)) => ( "#\\{" + x._1 + "\\}" ).r.replaceAllIn( s, x._2 ))
-
==============================
7.또한 정말 복잡하고 긴 문자열을위한 템플릿 엔진의 사용을 고려할 수 있습니다. 내 머리 꼭대기에 나는 다른 사람의 사이에 Scalate하는 구현하는 콧수염 템플릿 엔진을 가지고있다.
또한 정말 복잡하고 긴 문자열을위한 템플릿 엔진의 사용을 고려할 수 있습니다. 내 머리 꼭대기에 나는 다른 사람의 사이에 Scalate하는 구현하는 콧수염 템플릿 엔진을 가지고있다.
과잉 간단한 문자열에 대한 성능 손실 될 수 있지만 당신은 그들이 실제 템플릿되기 시작 그 지역에있는 것으로 보일 수 있습니다.
from https://stackoverflow.com/questions/4051308/better-string-formatting-in-scala by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라 : asInstanceOf [T] 및 (T O) 사이의 차이점은 무엇인가? (0) | 2019.11.19 |
---|---|
[SCALA] 목록에서 고유 항목을 찾는 방법 스칼라 (0) | 2019.11.19 |
[SCALA] 스칼라 메모이 제이션 : 어떻게이 스칼라 메모 작동합니까? (0) | 2019.11.19 |
[SCALA] 스칼라에서 튜플에 케이스 클래스를 변환하는 쉬운 방법은 무엇입니까? (0) | 2019.11.19 |
[SCALA] 에 이동의 foreach는 방법에 현재 요소의 인덱스를 가져 오기? (0) | 2019.11.19 |