如何从字符串中获取最后2位数字

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)


tim*_*tes 6

但请注意,如果您的单位长度少于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)


Tom*_*ato 5

使用 size() 和 substring() 方法的另一个安全替代方案:

s?.size() < 2 ?s : s.substring(s.size() - 2)

请注意,上面处理的是空值和长度小于两个字符的字符串。


Dem*_*ian 5

最可读的解决方案可能只适用于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