Ich habe eine String
, die einen ganzzahligen Wert darstellt und möchte ihn in eine konvertieren int
. Gibt es ein grooviges Äquivalent zu Java Integer.parseInt(String)
?
Ich habe eine String
, die einen ganzzahligen Wert darstellt und möchte ihn in eine konvertieren int
. Gibt es ein grooviges Äquivalent zu Java Integer.parseInt(String)
?
Antworten:
Verwenden Sie die toInteger()
Methode, um a String
in ein zu konvertieren Integer
, z
int value = "99".toInteger()
Eine Alternative, die die Verwendung einer veralteten Methode vermeidet (siehe unten), ist
int value = "66" as Integer
Wenn Sie überprüfen müssen, ob das konvertiert werden String
kann , bevor Sie die Konvertierung durchführen, verwenden Sie
String number = "66"
if (number.isInteger()) {
int value = number as Integer
}
In neueren Versionen von Groovy ist eine der toInteger()
Methoden veraltet. Das Folgende stammt aus 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);
}
Sie können erzwingen, dass die nicht veraltete Version der Methode aufgerufen wird, indem Sie Folgendes verwenden:
int num = ((CharSequence) "66").toInteger()
Persönlich bevorzuge ich:
int num = 66 as Integer
isInteger()
zuerst mit überprüfen , da toInteger()
eine Ausnahme ausgelöst wird, wenn die Zeichenfolge nicht numerisch ist. Gleiches gilt für toFloat()
/isFloat()
int
in der Tat ist int
. Groovy wird immer noch die Integer - Klasse angezeigt werden , weil der Box, aber Sie werden zum Beispiel nicht in der Lage sein , zu vergeben , null
um einen int
, die in 1.0 möglich war. Wir haben die Änderung als unkritisch angesehen, da Sie null bereits nicht als Argument für einen Methodenaufrufparameter vom Typ verwenden konnten int
. Dies alles unterscheidet sich immer noch von Java, da Sie in Java Integer nicht durch einfache Zuweisung in Long konvertieren oder eine int-Taking-Methode mit Long aufrufen können.
StringGroovyMethods.isInteger(String)
und DefaultGroovyMethods.isInteger(CharSequence)
sind zugunsten von veraltet StringGroovyMethods.isInteger(CharSequence)
. Gleiches gilt für toInteger()
.
Es gibt verschiedene Möglichkeiten, dies ist mein Favorit:
def number = '123' as int
isInteger()
zuerst mit.
Integer.parseInt(String)
das auch eine Ausnahme auslöst, wenn die Zeichenfolge keine Zahl ist. Angesichts der Frage halte ich dies nicht für ein "Problem"
Als Nachtrag zu Don Antwort , nicht nur groovy eine fügt .toInteger()
Methode String
s, es fügt auch toBigDecimal()
, toBigInteger()
, toBoolean()
, toCharacter()
, toDouble()
, toFloat()
,toList()
, und toLong()
.
In der gleichen Weise fügt is*
groovy all jenen, die zurückkehren, true
wenn dieString
betreffende Format in das betreffende Format analysiert werden kann.
Die entsprechende GDK-Seite finden Sie hier.
isInteger()
, dann tun toInteger()
... das heißt, es sei denn, Sie möchten lieber einen try
/ catch
-Block hinzufügen :), aber Ausnahmen dafür zu verwenden, ist eine schlechte Idee.
Ich bin nicht sicher, ob es in neueren Versionen von groovy eingeführt wurde (die erste Antwort ist ziemlich alt), aber jetzt können Sie Folgendes verwenden:
def num = mystring?.isInteger() ? mystring.toInteger() : null
oder
def num = mystring?.isFloat() ? mystring.toFloat() : null
Ich empfehle die Verwendung von Floats oder sogar Doubles anstelle von Ganzzahlen, wenn die angegebene Zeichenfolge unzuverlässig ist.
mystring.toInteger()
stattdessen schreiben mystring.toFloat()
. Wäre def num = mystring?.isInteger() ? mystring.toInteger() : null
also richtig.
Nun, Groovy akzeptiert die Java-Form ganz gut. Wenn Sie fragen, ob es einen Groovier- Weg gibt, gibt es einen Weg, zu dem Sie gehen können Integer
.
Beide werden hier gezeigt:
String s = "99"
assert 99 == Integer.parseInt(s)
Integer i = s as Integer
assert 99 == i
Sie können auch statische Importe durchführen
import static java.lang.Integer.parseInt as asInteger
und nach dieser Verwendung
String s = "99"
asInteger(s)
toInteger()
Methode ist in groovy verfügbar, Sie könnten das verwenden.
Mehrere Möglichkeiten, dies zu erreichen. Beispiele sind wie folgt
a. return "22".toInteger()
b. if("22".isInteger()) return "22".toInteger()
c. return "22" as Integer()
d. return Integer.parseInt("22")
Hoffe das hilft
Groovy Style Konvertierung:
Integer num = '589' as Integer
Wenn Sie einen Anforderungsparameter haben:
Integer age = params.int('age')
Hier ist der andere Weg. wenn Sie keine Ausnahmen mögen.
def strnumber = "100"
def intValue = strnumber.isInteger() ? (strnumber as int) : null
Die Verwendung sollte immer noch toInteger () sein, da es nicht wirklich veraltet ist.
int value = '99'.toInteger()
Die String-Version ist veraltet, aber die CharSequence ist eine Schnittstelle, die ein String implementiert. Die Verwendung eines Strings ist also in Ordnung, da Ihr Code auch dann noch funktioniert, wenn die Methode nur mit CharSequence funktioniert. Gleiches gilt für isInteger ()
Siehe diese Frage als Referenz: Wie konvertiere ich einen String in CharSequence?
Ich habe es kommentiert, weil mich der Begriff der Ablehnung dieser Methode verwirrt hat und ich dies für andere Menschen vermeiden möchte.
Die einfachere Methode zum Konvertieren eines Strings in eine Ganzzahl in Groovy ist wie folgt ...
String aa="25"
int i= aa.toInteger()
Jetzt enthält "i" den ganzzahligen Wert.
toInteger()
Methode zum Konvertieren ...