Eu tenho um String
que representa um valor inteiro e gostaria de convertê-lo em um int
. Existe um equivalente groovy do Java Integer.parseInt(String)
?
Eu tenho um String
que representa um valor inteiro e gostaria de convertê-lo em um int
. Existe um equivalente groovy do Java Integer.parseInt(String)
?
Respostas:
Use o toInteger()
método para converter um String
para um Integer
, por exemplo
int value = "99".toInteger()
Uma alternativa que evita o uso de um método obsoleto (veja abaixo) é
int value = "66" as Integer
Se você precisar verificar se o String
pode ser convertido antes de realizar a conversão, use
String number = "66"
if (number.isInteger()) {
int value = number as Integer
}
Nas versões recentes do Groovy, um dos toInteger()
métodos foi preterido. O seguinte é retirado do org.codehaus.groovy.runtime.StringGroovyMethods
Groovy 2.4.4
/**
* Parse a CharSequence into an Integer
*
* @param self a CharSequence
* @return an Integer
* @since 1.8.2
*/
public static Integer toInteger(CharSequence self) {
return Integer.valueOf(self.toString().trim());
}
/**
* @deprecated Use the CharSequence version
* @see #toInteger(CharSequence)
*/
@Deprecated
public static Integer toInteger(String self) {
return toInteger((CharSequence) self);
}
Você pode forçar a chamada da versão não obsoleta do método usando algo horrível como:
int num = ((CharSequence) "66").toInteger()
Pessoalmente, eu prefiro muito:
int num = 66 as Integer
isInteger()
primeiro, porque toInteger()
lançará uma exceção se a sequência não for numérica. O mesmo se aplica a toFloat()
/isFloat()
int
é de fato int
. O Groovy ainda exibirá a classe Integer, por causa do boxe, mas você não poderá, por exemplo, atribuir null
a um int
, o que foi possível na versão 1.0. Nós consideramos a mudança ser não-crítico, uma vez que já não podia usar null como argumento para um parâmetro de chamada de método do tipo int
. Isso ainda é diferente de Java, pois em Java você não pode converter Inteiro em Longo por uma atribuição simples ou chamar um método de tomada int com um Longo.
StringGroovyMethods.isInteger(String)
e DefaultGroovyMethods.isInteger(CharSequence)
foram preteridos em favor de StringGroovyMethods.isInteger(CharSequence)
. O mesmo vale para toInteger()
.
Várias maneiras de fazer isso, essa é a minha favorita:
def number = '123' as int
isInteger()
primeiro.
Integer.parseInt(String)
que também lança uma exceção se a cadeia não é um número, então dada a pergunta, eu não considero este um "problema"
Como um adendo a resposta de Don , não só Groovy adicionar um .toInteger()
método para String
s, ele também adiciona toBigDecimal()
, toBigInteger()
, toBoolean()
, toCharacter()
, toDouble()
, toFloat()
, toList()
, e toLong()
.
Na mesma linha, o groovy também adiciona is*
equivalentes a todos os que retornam true
se o String
em questão puder ser analisado no formato em questão.
A página relevante do GDK está aqui.
isInteger()
, depois faça toInteger()
... isto é, a menos que você prefira adicionar um try
/ catch
bloco :), mas usar exceções para isso é uma má idéia.
Não sei se ele foi introduzido nas versões recentes do groovy (a resposta inicial é bastante antiga), mas agora você pode usar:
def num = mystring?.isInteger() ? mystring.toInteger() : null
ou
def num = mystring?.isFloat() ? mystring.toFloat() : null
Eu recomendo o uso de carros alegóricos ou mesmo duplos, em vez de números inteiros, se a string fornecida não for confiável.
mystring.toInteger()
vez de mystring.toFloat()
. Então, def num = mystring?.isInteger() ? mystring.toInteger() : null
seria correto.
Bem, o Groovy aceita perfeitamente o formulário Java. Se você está perguntando se existe uma maneira Groovier , existe uma maneira de seguir Integer
.
Ambos são mostrados aqui:
String s = "99"
assert 99 == Integer.parseInt(s)
Integer i = s as Integer
assert 99 == i
Também você pode fazer importação estática
import static java.lang.Integer.parseInt as asInteger
e após esse uso
String s = "99"
asInteger(s)
toInteger()
está disponível no groovy, você pode usar isso.
Várias maneiras de conseguir isso. Exemplos são como abaixo
a. return "22".toInteger()
b. if("22".isInteger()) return "22".toInteger()
c. return "22" as Integer()
d. return Integer.parseInt("22")
Espero que isto ajude
Conversão de estilo Groovy:
Integer num = '589' as Integer
Se você tiver um parâmetro de solicitação:
Integer age = params.int('age')
Aqui está o outro caminho. se você não gosta de exceções.
def strnumber = "100"
def intValue = strnumber.isInteger() ? (strnumber as int) : null
A maneira de usar ainda deve ser o toInteger (), porque não é realmente obsoleto.
int value = '99'.toInteger()
A versão String foi descontinuada, mas o CharSequence é uma interface que uma String implementa. Portanto, o uso de uma String é bom, porque seu código ainda funciona mesmo quando o método só funciona com CharSequence. O mesmo vale para isInteger ()
Veja esta pergunta para referência: Como converter uma String em CharSequence?
Comentei, porque a noção de obsoleto nesse método me confundiu e quero evitar isso para outras pessoas.
A maneira mais simples de converter uma string em número inteiro no Groovy é a seguinte ...
String aa="25"
int i= aa.toInteger()
Agora "i" contém o valor inteiro.
toInteger()
método para converter ...