11 groovy
我有一个问题是从字符串中获取最后两位数.
例如:
String texter = "5793231309"
Run Code Online (Sandbox Code Playgroud)
如何获得'09'?所以,当我println "texter : "+texter.这将是Groovy << 09
我尝试拆分但不成功?
Luk*_*itz 25
用它来分割你的第一个字符串:
static main(args) {
String texter = "5793231309"
String texter2 = texter[-2..-1]
println(texter2)
}
Run Code Online (Sandbox Code Playgroud)
ata*_*lor 15
这是一个单一的班轮,也是一个安全的选择:
assert "5793231309".reverse().take(2).reverse() == "09"
Run Code Online (Sandbox Code Playgroud)
Sea*_*ull 13
在groovy中,您可以通过负指数进行子串.
String last2 = texter[-2..-1] // Last 2 symbols
它是子串的类似物,它使用范围.
http://groovy.codehaus.org/Collections参见'使用下标运算符切片'
灵感来自tim_yates:
使用某些函数可能更安全,提取最后n个字符,如蒂姆所建议的那样.但我认为他的解决方案,正则表达式是一个很大的开销,新手可能很难理解.
有一种更简单,更快捷的方法,使用size()检查,然后使用range substring:
def lastN(String input, int n){
return n > input?.size() ? null : n ? input[-n..-1] : ''
}
assert lastN("Hello", 2) == 'lo'
assert lastN("Hello", 3) == 'llo'
assert lastN("Hello", 0) == ''
assert lastN("Hello", 13) == null
assert lastN(null, 3) == null
Run Code Online (Sandbox Code Playgroud)
但请注意,如果您的单位长度少于2个字符,s[ -2..-1 ]则会失败.
可能会做得更好:
String lastN( String input, int n ) {
input == null ?
null :
( input =~ /^.+(\S{$n})$/ ).with { m -> m.matches() ?
m[ 0 ][ 1 ] :
null }
}
assert lastN( "5793231309", 2 ) == '09'
assert lastN( "5793231309", 3 ) == '309'
assert lastN( "5793231309", 0 ) == ''
assert lastN( '', 2 ) == null
assert lastN( null, 2 ) == null
Run Code Online (Sandbox Code Playgroud)
要么:
String lastN( String input, int n ) {
if( input == null || input.length() < n ) null
else if( n == 0 ) ''
else input[ -n..-1 ]
}
assert lastN( "5793231309", 2 ) == '09'
assert lastN( "5793231309", 3 ) == '309'
assert lastN( "5793231309", 0 ) == ''
assert lastN( '', 2 ) == null
assert lastN( null, 2 ) == null
Run Code Online (Sandbox Code Playgroud)
使用 size() 和 substring() 方法的另一个安全替代方案:
s?.size() < 2 ?s : s.substring(s.size() - 2)
请注意,上面处理的是空值和长度小于两个字符的字符串。
最可读的解决方案可能只适用于drop()除最后两个字符之外的所有字符:
def texter = "5793231309"
println texter.drop(texter.size() - 2) //result: "09"
Run Code Online (Sandbox Code Playgroud)
或作为可重用的闭包:
def lastTwo = { it.drop(it.size() - 2) }
println lastTwo("ABC") //result: "BC"
println lastTwo("AB") //result: "AB"
println lastTwo("A") //result: "A" (no exception thrown)
println lastTwo("") //result: "" (no exception thrown)
Run Code Online (Sandbox Code Playgroud)
摆弄代码:https :
//groovyconsole.appspot.com/script/5768158526832640
Groovy优点的更多示例:http :
//mrhaki.blogspot.com/2011/09/groovy-goodness-take-and-drop-items.html
| 归档时间: |
|
| 查看次数: |
29966 次 |
| 最近记录: |