Groovy는 String을 표현할 때 " 와 ' 를 모두 사용합니다. 두 가지를 모두 허용하기 때문에 문자열 안에 따옴표를 쓰기가 쉬워집니다:
| Code Block |
|---|
println "he said 'cheese' once" println 'he said "cheese!" again' |
Groovy 파서는 \uab12 (역슬래시 이후 u, 그리고 네 자리의 16진수) 표기법을 지원합니다. 이 표기는 자바에서와 마찬가지로 문자열 내에서 뿐만 아니라 소스 코드의 어떤 부분에 나와도 상관 없습니다.,
문자열 결합
문자열은 "+" 를 통해 결합될 수 있습니다. 다음 예제를 참고하세요:
| Code Block |
|---|
#!/usr/bin/env groovy a = "world" print "hello " + a + "\n" |
다중 라인 문자열
Groovy에서 보통 문자열은 여러 줄에 걸쳐서 쓰일 수 없습니다. 이 규칙에 대한 예외로써, 줄 마지막에 역슬래시가 나오면 그 줄은 무시되고 현재 라인과 그 다음 라인을 결합합니다:
| Code Block |
|---|
// 이건 컴파일 에러 def foo = "hello |
만약 텍스트 한 묶음(예를 들어 HTML 코드 블록)을 문자열로 사용하고 싶은데 모두 인코드하기는 싫다면 """ 문법을 쓰면 됩니다:
| Code Block |
|---|
def name = "James"
def text = """\
hello there ${name}
how are you today?
"""
assert text != null
println(text)
|
두번째 줄 끝의 역슬래시로 인해 text}}에 담기는 문자열은 정확히 두 줄로 처리됩니다. 그리고 줄 바꿈은 호스트 시스템에 관계 없이 항상 {{'\n'' 으로 처리됩니다.
String 상수
특별한 문자를 처리하기 위해 역슬래시를 쓰지 않고도 문자열 상수를 표기할 수 있는 표기법이 있는데, 정규식을 표현할 때 특히 유용합니다:
| Code Block |
|---|
def s = /.*foo.*/ def dirname = /^.*\// def basename = /[^\/]+$/ |
더 자세한 내용은 정규식 을 참고하세요.
GStrings
쌍따옴표(하나의 쌍따옴표 혹은 세 개의 쌍따옴표)로 선언된 문자열은 그 내부에 JSP EL, Velocity, Jexl 비슷하게 ${expression} 문법으로 표기된 표현식을 포함할 수 있습니다. 메서드 호출을 비롯한 모든 유효한 Groovy 표현식이 ${...} 표기법 안에 들어갈 수 있습니다.
실제로 일어나는 일은 다음과 같습니다. 문자열 표현식이 ${...} 을 포함하고 있으면 보통의 java.lang.String 인스턴스가 아닌 GString 인스턴스가 생성됩니다. GString 인스턴스는 문자열 자체와 그 문자열 내부에 포함된 수식에서 쓰이는 값을 보관하고 있습니다. GString은 지연된 평가(lazy evaluation)를 사용하기 때문에 toString()이 호출되기 전까지는 GString이 평가되지 않습니다. 이러한 지연된 평가는 로깅 등에서 특히 유용합니다.
GString의 또다른 활용예는
| Wiki Markup |
|---|
{link:GroovySql|sql.html}{link} |
만약 GString을 String으로 변환하려면 toString()을 호출하면 됩니다. Groovy는 필요한 경우 자동으로 GString을 String으로 바꿔주기도 합니다.