У меня есть проблема с получением двух последних цифр из строки.
пример:
String texter = "5793231309"
как получить '09'?
поэтому при я println "texter : "+texter
.
Это будет Groovy < 09
Я пытаюсь разделить, но это не удается?
У меня есть проблема с получением двух последних цифр из строки.
пример:
String texter = "5793231309"
как получить '09'?
поэтому при я println "texter : "+texter
.
Это будет Groovy < 09
Я пытаюсь разделить, но это не удается?
Используйте это для разделения первой строки:
static main(args) {
String texter = "5793231309"
String texter2 = texter[-2..-1]
println(texter2)
}
Здесь один лайнер, который также является безопасной альтернативой:
assert "5793231309".reverse().take(2).reverse() == "09"
В 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
Будьте осторожны, если ваш блок имеет длину менее 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
Другая безопасная альтернатива, использующая методы size() и substring():
s?.size() < 2? s: s.substring(s.size() - 2)
Обратите внимание на то, что вышеописанное касается нулей и строк длиной менее двух символов.
Наиболее читаемым решением является, вероятно, всего лишь 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
В Java
используйте
String texter = "5793231309";
String val=texter.substring(texter.length()-2,texter.length());
System.out.println("val-->"+val);
В Groovy
вам не нужно просто лишнее,
String value= texter[-2..-1]