2018年7月30日 星期一

String 方法、邏輯控制 (Groovy 2.x 二)

※String 方法

package script
    
String x = 'xyz';
String r1 = x.charAt(1)
String r2 = x[1..2]
println x // xyz
println r1 // y
println r2 // yz
    
String c = x.center(6, '?') // 沒有第二個參數,預設是空格
println x // xyz
println c // ?xyz??
    
String p = x.padLeft(6, '?')
println x // xyz
println p // ???xyz
    
println 'abc'
println 'abc' > 'abd' // 前二個一樣,第三個 ascii 99 > 100 嗎? false
    
println 'axbxc'.minus('x') // abxc
println 'axbxc' - 'x' // abxc
    
println 'axbxc'.plus('x') // axbxcx
println 'axbxc' + 'x' // axbxcx
    
println 'abc'.reverse() // 從後往前讀,cba
println 'abc'.capitalize() // 首字母大寫,Abc
println 'ABC'.uncapitalize() // 首字母小寫,aBC
    
println ''.isBlank() // true
println ' '.isBlank() // true
println ''.isEmpty() // true
println ' '.isEmpty() // false
    
println Integer.MAX_VALUE // 2147483647
println '2147483648'.isInteger() // false
println '2147483648'.isLong() // true
println '2147483648'.isFloat() // true
println '2147483648'.isDouble() // true
println '2147483648'.isBigInteger() // true
println '2147483648'.isNumber() // 會呼叫 isBigDecimal(),true
println '2147483648'.isBigDecimal() // true
// 沒有 isByte isShort isCharacter isBoolean
    
println '2147483647'.toInteger() // 超過會報錯
// 沒有 toByte





※if

if(new ArrayList<>()) {
    println 'true'
} else { // 0、0.0、null、''、new空物件、
    println 'false'
}

※java 一定要是 boolean 才可以


※不支援範圍操作

int i = 59
if(i == 1..59) {
    println '不及格'
} else {
    println '及格' // 永遠都是及格
}




※switch

Integer a = 7
switch (a){
    case 7:
        println 'a'
        break
    
    case '7':
        println 'b'
        break
    
    case Number.class:
        println 'c'
        break
    
    case Integer.class:
        println 'd'
        break
    
    default:
        println 'e'
}

※java 的 switch 型別要全部一樣才可以,且只能是 char 和 int,java 7 又多個 String

※a b c d 都會被呼叫到,看誰寫前面就先印



def list = [1,2,3]
switch (list){
    case ArrayList:
        println 'a'
        break
    
    case [1,2,3]: // 相當於是 new,不可能進來
        println 'b'
        break
    
    case List.class:
        println 'c'
        break
    
    default:
        println 'd'
}

※switch 可以放其他東西,可以有類似 instanceof 的寫法


※支援範圍操作

def i = 61
switch (i){
    case 0..59:
        println '不及格'
        break
    
    case 60..100:
        println '及格'
        break
    
    default:
        println '超過範圍'
}




※迴圈

def sum = 0
for (def i in 1..10) { // in 寫「:」也行
    sum += i
}
println sum





for (def m : [a: 1, b: 2, c: 3]) { // in 寫「:」也行
    print "${m.key} "
    println m.value
}

※List 、Set 就直接拿來用,而 Map,使用內鍵的 key 和 value 即可

沒有留言:

張貼留言