1、gradle學習筆記(一):groovy變量及String詳解

groovy是運行在jvm上的語言,語法上跟java基本相似,能夠使用java全部的api。因此若是有java基礎的話,學習groovy是很是輕鬆的。html

1、groovy中的變量

一、類型 java中全部的基本類型,可是和java的區別是groovy中類型最終都是對象類型。java

二、定義python

​ 2.一、強類型:直接定義類型正則表達式

​ 2.二、弱類型:def類型(可改變類型,相似於js中的var)api

2、String詳解

groovy中對字符串的處理擴展了很強大的功能,操做起來很是的方便。數據結構

一、定義方式閉包

​ 1.一、單引號定義:和java中雙引號定義同樣jvm

​ 1.二、雙引號定義:學習

def age = 1
//擴展內容還能夠是表達式
def string = "my age is ${age}"
複製代碼

​ 1.三、三引號定義:定義有格式的字符串,如一段html代碼。測試

​ 1.四、延遲加載

​ 嵌入的閉包表達式僅僅容許攜帶0或者1個參數。 閉包做爲表達式比普通插值表達式有一個頗有用的特性:延遲加載。

def b = 'old'
def value1 = "${b}"
def value2 = "${->b}"
assert value1 == "old"
assert value2 == "old"
b = "new"
assert value1 == "old"    //使用純插值表達式,結果在GString建立時結合
assert value2 == "new"    //但使用閉包表達式,GString被強轉爲Sring時,閉包被調用,併產生包含新數值的更新字符串。
複製代碼

​ 1.五、斜槓字符串

​ 除了一般的帶引號字符串,groovy提供斜槓字符串,使用/做爲分隔符。斜槓字符串對於定義正則表達式和模式是特別有用的,由於不須要轉義反斜槓。只有正斜槓須要反斜槓轉義。斜槓字符串支持多行,支持插值。

二、String的方法

​ 2.一、java中String原有的方法

​ 2.二、DefaultGroovyMethods:groovy核心類,下面是groovy官網對這個類的描述:

​ 這個類定義了出如今groovy環境中的普通JDK類上的新的groovy方法。使用靜態方法時,第一個參數是目標類,即public Static String reverse(String self)爲String提供了一個reverse()方法。 注意:雖然這個類包含許多「公共」靜態方法,但它主要被視爲一個內部類(它的內部包名也代表了這一點)。在Groovy中使用時,咱們重視這些方法的向後兼容性,但在Java方法調用級別上,咱們不重視向後兼容性。也就是說,Groovy的將來版本可能會刪除或移動此文件中的方法調用,但一般的目標是使方法在Groovy中可用。

​ 2.三、StringGroovyMethods:繼承自DefaultGroovyMethods,重寫了許多DefaultGroovyMethods的方法,使這些方法更適用於String。

三、String經常使用的方法

​ 3.一、字符串填充

// center(Number numberOfChars,CharSequence padding) ,將字符串做爲中心進行填充
    def str = "groovy"
    println str.center(5,"a") //結果:groovy
    println str.center(6,"a") //結果:groovy
    println str.center(7,"a") //結果:groovya
    println str.center(8,"a") //結果:agroovya
    println str.center(9,"a") //結果:agroovyaa
    println str.center(8)     //結果: groovy ,不傳padding表明以空格填充

//PS:當numberOfChars小於或等於str自己的長度時,不進行填充操做,大於則用pandding擴展至長度numberOfChars,從字符串的右邊(尾)進行填充,再到左邊(頭)

//padLeft(Number numberOfChars,CharSequence padding) ,在字符串的左邊進行填充

//c. padRight(Number numberOfChars,CharSequence padding),在字符串的右邊進行填充
複製代碼

​ 3.二、字符串比較

​ 3.2.一、操做符比較

def a = "a"
def b = "b"
//比較的是字符串ASCII碼的大小,等價於a.compareTo(b) == 1
println a > b
結果爲:false
複製代碼

​ 3.2.二、方法比較:compareTo

​ 3.三、獲取字符串的字符

def abc = "abc"
println abc[0] == "a"
結果爲:true
複製代碼

​ 3.四、字符串中的減法(取差集)

println abc - "ab"
println abc - "d"
println abc - "abcd"
結果爲:
c
abc
abc
複製代碼

3.五、其餘方法

//String getAt(int index) 字符串的下標運算符
assert "abcdefg".getAt(2) == "c"
assert "abcdefg"[2] == "c"
assert "abcdefg".getAt(1..2) == "bc"    //String getAt(Range range)
assert "abcdefg"[1..2] == "bc"

//Int indexOf(String str) 返回給定子字符串在當前字符串中首次出現的索引值
assert "abcdefg".indexOf("b") == 1
assert "abcd".indexOf("g") == -1    //若是原字符串中不存在給定子字符串就返回-1

//StringBuffer leftShift(Object value) 重載<< 使兩個字符串相加,返回一個新的字符串
assert "ab".leftShift("cd").class ==  java.lang.StringBuffer
assert "ab".leftShift("cd").toString() == "abcd"

//int length() / int size() 返回字符串的長度
assert "abcd".length() == 4
assert "abcd".size() == 4

//String concat(String str) 在字符串後添加str字符串
assert "ab".concat("12") == "ab12"

//Boolean endsWith(String suffix) 測試字符串是否以給定的後綴結尾
assert "demo1".endsWith("1") == true

//String minus(Object value) 刪除字符串中value部分
assert "abcd".minus("bc") == "ad"

//String next() 按字典順序增長給定字符串末尾字符順序
assert "abcd".next() == "abce"
assert "abc1".next() == "abc2"

//String previous() 按字典順序增長給定字符串末尾字符順序
assert "abcd".previous() == "abcc"
assert "abc1".previous() == "abc0"


//String padLeft(Number numberOfCharacters) 與center()用法相似,在元字符串左邊填充空格字符
assert "abcd".padLeft(5) == " abcd"
//String padLeft(Number numberOfCharacters,String padding) 與center()用法相似,在元字符串左邊填充padding字符
assert "abcd".padLeft(5,"12") == "1abcd"
//String padRight(Number numberOfCharacters) 與padLeft()用法相似,在元字符串左邊填充空格字符
assert "abcd".padRight(5) == "abcd "
//String padRight(Number numberOfCharacters,String padding) 與padLeft()用法相似,在元字符串左邊填充padding字符
assert "abcd".padRight(5,"12") == "abcd1"

//String plus(Object valus) 字符串相加
assert "abcd".plus("123") == "abcd123"

//String reverse() 建立當前字符串的逆序字符串
assert "abcd".reverse() == "dcba"

//String substring(int beginIndex) 返回一個當前字符串的指定索引開始的子字符串
assert "abcd".substring(1) == "bcd"
//String substring(int beginIndex,int endIndex) 返回一個當前字符串的指定索引開始的子字符串
assert "abcd".substring(1,2) == "bc"
//Character toCharacter()
//Double toDouble()
//Float toFloat()
//Integer toInteger()
//Long toLong() 字符串類型轉換
//List toList() 將指定的字符串轉換成一個由單個字符組成的字符串列表
assert "abcd".toList() == ["a","b","c","d"]

//String toUpperCase() 將當前字符串對象的全部字符轉換爲大寫
assert "abcd".toUpperCase() == "ABCD"
//String toLowerCase() 將當前字符串對象的全部字符轉換爲小寫 
assert "ABCD".toUpperCase() == "abcd"
//List tokenize() 使用空格做爲字符串的分隔符
//List tokenize(String token) 使用指定的token參數做爲字符串的分隔符
//String[] split(String regex) 使用與給定的正則表達式相匹配的子字符串將字符串分隔爲多個字符串
// Boolean matches(String regex) 測試字符串是否匹配給定子字符串
複製代碼

3、邏輯控制

一、if/else 與java中一致

二、switch/case java中switch只能傳入int類型、byte,char和short類型能自動提高爲int類型、String類型和後來擴展的enum類型。而在groovy中,switch能夠傳入任意類型。

//在groovy中,switch能夠傳入任性類型的數據進行匹配
static String judgeType(Object x) {
    def result
    switch (x) {
        case "string":
            result = "x is string"
            break
        case [4, 5, 6, 7,'inList']: //列表(數據結構中講解)
            result = "x is in list [4, 5, 6, 7,'inList']"
            break
        case 10..15: //範圍range(數據結構中講解)
            result = "x is in range 10..15"
            break
        case Integer:
            result = "x is Integer"
            break
        case BigDecimal:
            result = "x is BigDecimal"
            break
        case List:
            result = "x is List"
            break
 default:
            result = "no match"
            break
    }
    return result
}

def x = "string"
def x1 = 5
def x2 = 10
def x3 = 3
def x4 = 3.14
def x5 =[4,6]
def x6 ="hi groovy"
def x7 = "inList"
println judgeType(x) //x is string
println judgeType(x1) // x is in list [4, 5, 6, 7,'inList']
println judgeType(x2) // x is in range 10..15
println judgeType(x3) // x is Integer
println judgeType(x4) // x is BigDecimal
println judgeType(x5) // x is List
println judgeType(x6) // no match
println judgeType(x7) // x is in list [4, 5, 6, 7,'inList']
複製代碼

三、while循環 同java

四、for循環

/* *範圍中的for循環 */
    def sum = 0
    for (i in 0..9) {
        sum += i
    }
    println sum //45
    sum = 0
/* *list中的for循環 */
    for (i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) {
        sum += i
    }

    println sum //45

/* *map中的for循環 */
    for (i in ['java': 1, ' groovy': 2, 'python': 3]) {
        println "key:${i.key} value:${i.value}"
    }
//key:java value:1
//key: groovy value:2
//key:python value:3
複製代碼
相關文章
相關標籤/搜索