Grovvy 字符串的样式

Java仅仅允许将文本放在双引号——"like this"这样风格的字符串,如果你想嵌入动态值到字符串中,必须调用格式化方法(在java1.5中提供,容易了一些但是仍然有些 复杂)或者进行字符串拼接。

如果在字符串中包括许多斜杠“\”(比如windows文件名和 正则表达式),代码将变得非常难读,因为你必须使用双斜杠。

如果在源代码中有大量的文本需要分布在多行,那么必须在每一行包含一个完整的字符串(或者几个完整的字符串)。

Groovy认识到这中间的不足,所以它提供了更多的选择,总结在表3.5中。

a 这种类型的看点是避免进行字符转义,所以在语言层面进行避免是可以做到的,剩余的就是用\u表示的unicode的支持和$,除非$用来标明是模式的结束,参考groovy的语言规范。

每一种表示法的目的都是为了使文本内容最小化,每一个表示法都有一个和其他表示法不一样的属性:

 单引号所表示的字符串不会按照GString的类型来处理内容,这等价于java的字符串;

 双引号表示的意思与单引号表示的意思是等价的。如果字符串内容中包括没有被转义的$符号,那么它被加工成GString实例,GString更详细的信息将在下节介绍;

 三组引号(或者是多行字符串)允许字符串的内容在多行出现,新的行总是被转换为“\n”,其他所有的空白字符都被完整的按照文本原样保留,多行字符串也许是一个GString实例,这根据是使用单引号或者多双引号而定,多行字符串事实上像Ruby或者Perl中的HERE-document。

 “/”表示的字符串,指明字符串内容不转义反斜杠“\”,这在正则表达式的使用中特别有用,就象后面看到的那样,只有在一个反斜杠接下来是一个字符u的时候才需要进行转义——这稍微有点麻烦,因为\u用来表示一个unicode转义。

就像早些时候提到的那样,groovy使用与java相似的机制处理特殊的字符,如换行符 和制表符。另外,“$”符号在groovy也可进行转义,避免编译器将字符串处理成GString 实例,列表3.6是完整的转义字符列表。

列表3.6 在groovy已知的转义字符

注意,在双引号字符串中,单引号不需要进行转义,反过来也是一样。换句话说,'I said,“hi.”'和"don’t"这两者都会有你希望的结果,基于一致性的原因,这两者仍然可以进行转义,同样的,$符号在单引号字符串中也能进行转义,即使它们不是必须的,这样使得切换工作会十分容易。

注意,java使用单引号表示一个字符,但是就像你看到的那样,在groovy中不能这样做,因为单引号已经用来表示字符串了,不过在显式声明类型的时候,在groovy中能够获得和java相同的结果:char a = 'x'或者Character b = 'x'java.lang.String对象‟x‟将被强制转换为一个java.lang.Character,如果在别的时候想将一个字符串转换为一个字符,可以采用下面的两种方式:'x' as char或者'x'.toCharacter()作为 GDK吸引人的特性, groovy在字符串中包括许多有用的 to*方法,如 toInteger,toLong,toFloat和toDouble。

究竟使用那种方式,除非编译器决定他是 Gstring 对象,否则将是一个 java.lang.String对象实例,就像java字符串一样。

到现在,我们仅仅间接的提到 Gstring的功能。