1. 程式人生 > >【Groovy手札】Groovy的字串

【Groovy手札】Groovy的字串

Groovy提供不同的字串表現形式,包括:

def map = [:]

map.'單引號'
map
."雙引號"
map
.'''三重單引號'''
map
."""三重雙引號"""
map
./單斜槓字串/
map
.$/美元單斜槓字串/$

Groovy同樣支援Java的字串型別(java.lang.String),而且也有自己的可插值字串(groovy.lang.GString)。

2.1  單引號字串

單引號字串是指由包含在單引號之間的字元序列:

'a singlequoted string'

單引號字串會被Groovy編譯器解釋為java.lang.String, 並且不支援內插。

2.2 

字串拼接

所有的Groovy字串都可以由操作符+ 進行拼接:

assert 'ab' == 'a' + 'b'

2.3  三重單引號字串

三重單引號字串是指由包含在連續的三個單引號之間的字元序列:

'''a triplesingle quoted string'''

三重單引號字元串同樣會被Groovy編譯器解釋為java.lang.String, 並且不支援插值。但是三重單引號字串支援多行(multiline)輸入,

def aMultilineString ='''lineone
line two
line three'''

2.4  特殊字元

Groovy中的特殊字元包括:

'\t'

tabulation(製表符)

'\b'

backspace(退格鍵)

'\n'

newline(新行)

'\r'

carriage return(回車鍵)

'\f'

formfeed(換頁符)

'\\'

反斜槓

'\''

單引號

'\"'

雙引號

2.5  雙引號字串

雙引號字串是指由包含在雙引號之間的字元序列:

"adouble quoted string"

在沒有內插的表示式時,編譯器會將其轉換成java.lang.String, 如果存在需要轉換的表示式,則會將其轉換成groovy.lang.GString

例項。

2.6 字串插值

除了單引號和三重單引號字串以外,所有剩下的GroovyString表示式都可以進行插值操作。需要插值的地方使用一個佔位符代替,可以使用${} 或者對於.表示式使用$ 字首。GroovyGString會通過呼叫 toString() 方法來轉換得到字串物件。

def name ='Guillaume'// a plain stringdef greeting ="Hello${name}"

assert greeting.toString()=='Hello Guillaume'

而且,任何的Groovy表示式都是有效的:

def sum ="The sum of 2 and3 equals ${2 + 3}"assert sum.toString()=='The sum of 2 and 3 equals 5'

其實不僅僅只有表示式,程式碼句也是可以放在佔位符${}中的,只不過這個程式碼句的轉換值是null而已。

def person =[name:'Guillaume', age:36]assert"$person.name is $person.age years old"=='Guillaume is 36 yearsold'

但是僅僅對於a.b,a.b.c, 這種.表示式是有效的,對於.表示式後面不是屬性,而是方法的情況則會報出groovy.lang.MissingPropertyException 異常,例如:

def number =3.14

shouldFail(MissingPropertyException){
    println
"$number.toString()"}

Groovy會認為你在嘗試獲取number物件的一個名為toString的屬性,所以可以認為"$number.toString()"會被解釋成"${number.toString}()".

2.7  GString和String的hashCodes

JavaString物件是不可變物件,但是GString物件是可變的,其表現值取決於插值。雖然groovy.lang.GStringjava.lang.String可能會得到相同的結果,但是他們的hashCode是不一樣的。

assert"one: ${1}".hashCode()!="one: 1".hashCode()

由於GStringString的雜湊碼不同,所以千萬不要使用Gstring物件作為一個MapKey

def key ="a"def m =["${key}":"letter${key}"]

assert m["a"]==null

相關推薦

Groovy手札Groovy字串

Groovy提供不同的字串表現形式,包括: def map = [:] map.'單引號' map."雙引號" map.'''三重單引號''' map."""三重雙引號""" map./單斜

Groovy手札Groovy的List

Groovy採用逗號分隔一個列表(List)中的值,並且會轉譯成JDK中的java.util.List,並且Groovy的預設具體實現為java.util.ArrayList , 但是我們可以手動的轉

Groovy手札Groovy的幾種註釋

Groovy共有四種註釋方式,下面詳細介紹一下: 1.1  單行註釋 在Groovy中,單行註釋以// 開始,可以從一行的任意位置開始,// 後面的字元均為註解部分。例如: // a stand

Gradle學習—— Groovy基礎語法以及資料結構

從使用Android Studio開始,Gradle就是一個繞不來的話題,之前並不是很重視Gradle,一直就沒有去學習,到最近的專案發現Gradle實在太強大,Gradle作為構建工具,對比於Maven、Ant來說,在依賴管理、構建生命週期、載入構建系統元件

Java筆記String字串拼接應該使用哪種方式?

我們所知道的字串String的拼接有: “+” 、 concat () 方式實現,或者使用StringBuilder、StringBuffer類實現。這幾種方式效能的從低到高進行排序,則順序為:“+”  <  concat ()  < S

c語言字串str中擷取一個子串,要求子串是從str的第m個字元開始 由n個字元組成

#include<stdio.h> #include<string.h> /* 編寫程式:從字串str中擷取一個子串,要求子串是從str的第m個字元開始 由n個字元組成 程式理解: 需求中要求的是從一個字串中擷取固定的長度 m---->是開始的個數 n---->是

筆試題列印字串所有子集

7、有一個集合由A-Z這26個字母組成,列印這個集合的所有子集,每個子集一行,寫C程式碼實現,不能使用遞迴(騰訊面試題) 思路:J作為一個可以移動的指標,i代表資料的範圍(所有可能性),J每迴圈結束,從緩衝區刷到終端 void SubSet(int n) { const

程式設計題基本字串壓縮

[程式設計題]基本字串壓縮 熱度指數:58188 時間限制:3秒 空間限制:32768K 利用字元重複出現的次數,編寫一個方法,實現基本的字串壓縮功能。比如,字串“aabcccccaaa”經壓縮會變成“a2b1c5a3”。若壓縮後的字串沒有變短,則返回原先的字串。 給定一

學習筆記簡單字串演算法 —— 序列自動機

序列自動機是一個比字尾自動機簡單的自動機。字尾自動機可以看神仙 x y z

Leetcode_總結415. 字串相加 -python

Q: 給定兩個字串形式的非負整數 num1 和num2 ,計算它們的和。 注意: num1 和num2 的長度都小於 5100. num1 和num2 都只包含數字 0-9. num1 和num2 都不包含任何前導零。 你不能使用任何內建 BigInteger 庫

Leetcode_總結43. 字串相乘 -python

Q: 給定兩個以字串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字串形式。 示例 1: 輸入: num1 = "2", num2 = "3" 輸出: "6" 示例 2: 輸入: num1 = "123", nu

PAT乙級1078 字串壓縮與解壓

文字壓縮有很多種方法,這裡我們只考慮最簡單的一種:把由相同字元組成的一個連續的片段用這個字元和片段中含有這個字元的個數來表示。例如 ccccc 就用 5c 來表示。如果字元沒有重複,就原樣輸出。例如 aba 壓縮後仍然是 aba。 解壓方法就是反過來,把形如 5c 這樣的表

C#基礎判斷字串是否為空

String.Empty和string=””是一樣的,同樣都是需要佔用記憶體空間<空字串>;但優先推薦使用string.Empty Console.WriteLine("".Equals(string.Empty));//結果:true 還一種高效判斷方法(s

Java基礎Json字串轉物件和轉List集合操作

to今天發現專案中需要拿到對接系統中傳值的Json,需要轉換成List集合。回顧下Json字串的操作,寫了個測試。 public class JsonToUtil {     private  static final  Logger log = LoggerFactor

重溫基礎8.字串

本文是 重溫基礎 系列文章的第八篇。 今日感受:人在異鄉,也不能忘記湯圓。 系列目錄: 【複習資料】ES6/ES7/ES8/ES9資料整理(個人整理) 【重溫基礎】1.語法和資料型別 【重溫基礎】2.流程控制和錯誤處理 【重溫基礎】3.迴圈和迭代 【重

C#基礎判斷字串是否為空、判斷字元是否為數字

一、判斷字串是否為空 String.Empty和string=””是一樣的,同樣都是需要佔用記憶體空間<空字串>;但優先推薦使用string.Empty Console.WriteLine("".Equals(string.Empty));//結果:true 還一種高效判斷方

C語言過濾字串非字母的字元並統計字母數

#include <stdio.h> #include <stdlib.h> int n=0; char* letter(char *str){ int i=0,j=0

c語言一個字串,包含n個字元。將此字串中從第m個字元開始的全部字元複製成為另一個字串

#include <stdio.h> #include <string.h> int main() { void copystr(char *,char *,int); int m; char str1[20],str2[20]; print

演算法題查詢字串中無重複最長子串的長度

在閱讀的過程中有任何問題,歡迎一起交流 QQ:1494713801 題目:輸入是一個字串,找出沒有重複字元的最長子字串的長度 示例: “abcabcbb”最長子串(abc)長度為3   “bbbbbbb”最長子串(b)長度為1 “abdevbac”最長子串(bdev)

C/C++字串按空格逆置

一、題目要求 有一個字元陣列的內容為:"student a am i",請你將陣列的內容改為"i am a student". 要求: 不能使用庫函式。只能開闢有限個空間(空間個數和字串的長度無關)。 二、題目分析 初級理解: 乍一看,這是一個字串逆置 可是真的有這麼簡單嗎