Convertendo uma string para int no Groovy


286

Eu tenho um Stringque representa um valor inteiro e gostaria de convertê-lo em um int. Existe um equivalente groovy do Java Integer.parseInt(String)?


1
por que não usar apenas a palavra-chave def?
— Onipresente

4
Eu tenho um parâmetro de string que contém um número inteiro. O uso de def i = string_parameter resulta em exceção de conversão de classe, se depois eu usar i como int.
— Steve Kuo

Respostas:


492

Use o toInteger()método para converter um Stringpara 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
}

Atualização de descontinuação

Nas versões recentes do Groovy, um dos toInteger()métodos foi preterido. O seguinte é retirado do org.codehaus.groovy.runtime.StringGroovyMethodsGroovy 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

19
Advertência emptor: você precisa verificar o valor 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()
— Andres Kievsky

8
Na documentação da API 2.1.6, isInteger / toInteger está obsoleto. Qual é a melhor maneira atual de fazer isso?
— Pakman

1
O uso de Integer paramValue = params.int ('paramName') não é seguro para nulos. Se não houver um parâmetro com o nome "paramName" no mapa de parâmetros, você receberá uma exceção sobre não pode converter nulo para int.
— Michael

2
só queria acrescentar que desde Groovy 1.8 inté de fato int. O Groovy ainda exibirá a classe Integer, por causa do boxe, mas você não poderá, por exemplo, atribuir nulla 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.
— blackdrag

1
@pakman StringGroovyMethods.isInteger(String)e DefaultGroovyMethods.isInteger(CharSequence)foram preteridos em favor de StringGroovyMethods.isInteger(CharSequence). O mesmo vale para toInteger().
— bmaupin

67

Várias maneiras de fazer isso, essa é a minha favorita:

def number = '123' as int

10
Mesmo problema acima, isso gerará uma exceção se a sequência não for um número. Verifique isInteger()primeiro.
— Andres Kievsky

12
@ank a pergunta feita por um equivalente de 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"
— Donal

30

Como um adendo a resposta de Don , não só Groovy adicionar um .toInteger()método para Strings, 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 truese o Stringem questão puder ser analisado no formato em questão.

A página relevante do GDK está aqui.


8
Esta é a resposta correta - verifique primeiro com isInteger(), depois faça toInteger()... isto é, a menos que você prefira adicionar um try/ catchbloco :), mas usar exceções para isso é uma má idéia.
— Andres Kievsky

2
@anktastic eu diria que a minha resposta é mais correto porque a pergunta feita por um "Groovy equivalente do Java Integer.parseInt (String)", ou seja, uma conversão desmarcada
— Donal

25

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.


2
+1 melhor solução IMO já que inclui verificação nulo, além de verificação de tipo antes da conversão
— kaskelotti

Eu recomendo não usar carros alegóricos ou duplos, porque eles são inerentemente imprecisos. Como o Groovy facilita o uso do BigDecimals como qualquer outro número, se você precisar de mais precisão do que um número inteiro, use-o. Em segundo lugar, essa abordagem parece segura, mas o resultado pode ser esse num == null, portanto, você precisa ter cuidado com isso #
— Hans Bogaards

Para o primeiro código de exemplo, acho que você queria escrever em mystring.toInteger()vez de mystring.toFloat(). Então, def num = mystring?.isInteger() ? mystring.toInteger() : nullseria correto.
— Sk8erPeter

15

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

5
Esta resposta também é lançada quando a string não é numérica - cuidado!
— Andres Kievsky

6

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)

Legal, eu esqueço muito as pequenas coisas.
— Magic Octopus Urn


2

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


1
Como isso adiciona algo à pergunta que ainda não está presente nas 8 respostas existentes?
— LukeG 23/02

Meu mau, ficou um pouco ganancioso aqui
— Darth Shekhar

1

Conversão de estilo Groovy:

Integer num = '589' as Integer

Se você tiver um parâmetro de solicitação:

Integer age = params.int('age')



0

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.


-1

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.


4
O que isso acrescenta às respostas existentes? A resposta aceita postada há 9 anos começa com: "Use o toInteger()método para converter ...
— localidade padrão
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.