Как получить последние 2 цифры из строки

У меня есть проблема с получением двух последних цифр из строки.

пример:

String texter = "5793231309"

как получить '09'? поэтому при я println "texter : "+texter. Это будет Groovy < 09

Я пытаюсь разделить, но это не удается?

Ответ 1

Используйте это для разделения первой строки:

static main(args) {

    String texter = "5793231309"
    String texter2 = texter[-2..-1]

    println(texter2)
}

Ответ 2

Здесь один лайнер, который также является безопасной альтернативой:

assert "5793231309".reverse().take(2).reverse() == "09"

Ответ 3

В groovy вы можете подстроить через отрицательные индексы.

String last2 = texter[-2..-1] // Last 2 symbols

Его аналог подстроки, и он использует диапазоны.

http://groovy.codehaus.org/Collections см. "Нарезка с помощью оператора индекса"

Вдохновленный tim_yates:

Возможно, более безопасно использовать некоторую функцию для извлечения последних n символов, как предположил tim. Но я думаю, что его решение, с регулярным выражением, является большой накладной, и может быть трудно понять новичками.

Существует более простой и быстрый способ сделать это, используя проверку размера(), а затем подстроку диапазона:

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

Ответ 4

Будьте осторожны, если ваш блок имеет длину менее 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

Или:

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

Ответ 5

Другая безопасная альтернатива, использующая методы size() и substring():

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

Обратите внимание на то, что вышеописанное касается нулей и строк длиной менее двух символов.

Ответ 6

Наиболее читаемым решением является, вероятно, всего лишь drop() все, кроме двух последних символов:

def texter = "5793231309"
println texter.drop(texter.size() - 2)  //result: "09"

Или как многократное закрытие:

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)

Скриншот с кодом:
https://groovyconsole.appspot.com/script/5768158526832640

Дополнительные примеры Groovy доброты:
http://mrhaki.blogspot.com/2011/09/groovy-goodness-take-and-drop-items.html

Ответ 7

В Java используйте

String texter = "5793231309";
String val=texter.substring(texter.length()-2,texter.length());
System.out.println("val-->"+val);

В Groovy вам не нужно просто лишнее,

String value= texter[-2..-1]