Ho un String
che rappresenta un valore intero e vorrei convertirlo in un int
. Esiste un equivalente di Groovy di Java Integer.parseInt(String)
?
Ho un String
che rappresenta un valore intero e vorrei convertirlo in un int
. Esiste un equivalente di Groovy di Java Integer.parseInt(String)
?
Risposte:
Utilizzare il toInteger()
metodo per convertire un String
in un Integer
, ad es
int value = "99".toInteger()
Un'alternativa, che evita l'uso di un metodo deprecato (vedi sotto) è
int value = "66" as Integer
Se è necessario verificare se il String
può essere convertito prima di eseguire la conversione, utilizzare
String number = "66"
if (number.isInteger()) {
int value = number as Integer
}
Nelle recenti versioni di Groovy uno dei toInteger()
metodi è stato deprecato. Quanto segue è tratto da 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);
}
Puoi forzare la versione non deprecata del metodo per essere chiamata usando qualcosa di terribile come:
int num = ((CharSequence) "66").toInteger()
Personalmente preferisco di gran lunga:
int num = 66 as Integer
isInteger()
, perché toInteger()
genererà un'eccezione se la stringa non è numerica. Lo stesso vale per toFloat()
/isFloat()
int
è davvero int
. Groovy visualizzerà comunque la classe Integer, a causa della boxe, ma ad esempio non sarà possibile assegnare null
a un int
, cosa che era possibile in 1.0. Abbiamo considerato la modifica non critica, poiché non era già possibile utilizzare null come argomento per un parametro di chiamata del metodo di tipo int
. Tutto ciò è ancora diverso da Java, poiché in Java non è possibile convertire Integer in Long con una semplice assegnazione o chiamare un metodo int prendendo con un Long.
StringGroovyMethods.isInteger(String)
e DefaultGroovyMethods.isInteger(CharSequence)
sono deprecati a favore di StringGroovyMethods.isInteger(CharSequence)
. Lo stesso vale per toInteger()
.
Diversi modi per farlo, questo è il mio preferito:
def number = '123' as int
isInteger()
prima con .
Integer.parseInt(String)
cui genera anche un'eccezione se la stringa non è un numero, quindi data la domanda, non considero questo un "problema"
Come un addendum alla risposta di Don , non solo non Groovy aggiungere un .toInteger()
metodo per String
s, si aggiunge anche toBigDecimal()
, toBigInteger()
, toBoolean()
, toCharacter()
, toDouble()
, toFloat()
, toList()
, e toLong()
.
Allo stesso modo, is*
Groovy aggiunge anche eqivalenti a tutti quelli che ritornano true
se la String
questione in questione può essere analizzata nel formato in questione.
La pagina GDK pertinente è qui.
isInteger()
, poi fai toInteger()
... cioè, a meno che tu non preferisca aggiungere un try
/ catch
blocco :) ma usare le eccezioni per questo è una cattiva idea.
Non sono sicuro che sia stato introdotto nelle versioni recenti di groovy (la risposta iniziale è abbastanza vecchia), ma ora puoi usare:
def num = mystring?.isInteger() ? mystring.toInteger() : null
o
def num = mystring?.isFloat() ? mystring.toFloat() : null
Raccomando di usare float o anche doppi invece di numeri interi nel caso in cui la stringa fornita non sia affidabile.
mystring.toInteger()
invece di mystring.toFloat()
. Quindi def num = mystring?.isInteger() ? mystring.toInteger() : null
sarebbe corretto.
Bene, Groovy accetta bene il modulo Java. Se stai chiedendo se esiste un modo Groovier , c'è un modo per andare Integer
.
Entrambi sono mostrati qui:
String s = "99"
assert 99 == Integer.parseInt(s)
Integer i = s as Integer
assert 99 == i
inoltre puoi effettuare l'importazione statica
import static java.lang.Integer.parseInt as asInteger
e dopo questo uso
String s = "99"
asInteger(s)
toInteger()
Il metodo è disponibile in Groovy, è possibile utilizzarlo.
Diversi modi per raggiungere questo obiettivo. Gli esempi sono i seguenti
a. return "22".toInteger()
b. if("22".isInteger()) return "22".toInteger()
c. return "22" as Integer()
d. return Integer.parseInt("22")
Spero che questo ti aiuti
Conversione di stile Groovy:
Integer num = '589' as Integer
Se hai un parametro di richiesta:
Integer age = params.int('age')
Ecco l'altro modo. se non ti piacciono le eccezioni.
def strnumber = "100"
def intValue = strnumber.isInteger() ? (strnumber as int) : null
Il modo di usare dovrebbe essere comunque toInteger (), perché non è veramente deprecato.
int value = '99'.toInteger()
La versione String è obsoleta, ma CharSequence è un'interfaccia implementata da String. Quindi, usare una stringa è ok, perché il tuo codice funzionerà anche quando il metodo funzionerà solo con CharSequence. Lo stesso vale per isInteger ()
Vedi questa domanda per riferimento: Come convertire una stringa in CharSequence?
Ho commentato, perché la nozione di deprecato su questo metodo mi ha confuso e voglio evitarlo per le altre persone.
Il modo più semplice di convertire una stringa in numero intero in Groovy è come segue ...
String aa="25"
int i= aa.toInteger()
Ora "i" contiene il valore intero.
toInteger()
metodo per convertire ...