Ben String
bir tamsayı değeri temsil eden ve bir dönüştürmek istiyorum bir var int
. Java'ların harika bir eşdeğeri var Integer.parseInt(String)
mı?
Ben String
bir tamsayı değeri temsil eden ve bir dönüştürmek istiyorum bir var int
. Java'ların harika bir eşdeğeri var Integer.parseInt(String)
mı?
Yanıtlar:
Kullan toInteger()
bir dönüştürme yöntemi String
bir etmek Integer
, mesela
int value = "99".toInteger()
Kullanımdan kaldırılmış bir yöntem kullanmaktan kaçınan bir alternatif (aşağıya bakın)
int value = "66" as Integer
Eğer olup olmadığını kontrol etmek gerekirse String
olabilir dönüşüm, kullanım gerçekleştirmeden önce dönüştürülecek
String number = "66"
if (number.isInteger()) {
int value = number as Integer
}
Groovy'nin son sürümlerinde toInteger()
yöntemlerden biri kullanımdan kaldırıldı. Aşağıdakiler org.codehaus.groovy.runtime.StringGroovyMethods
Groovy 2.4.4'ten alınmıştır.
/**
* 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);
}
Yöntemin kullanımdan kaldırılmış sürümünün, aşağıdaki gibi korkunç bir şey kullanarak çağrılmasını sağlayabilirsiniz:
int num = ((CharSequence) "66").toInteger()
Şahsen ben çok tercih ederim:
int num = 66 as Integer
isInteger()
önce kontrol etmeniz gerekir , çünkü toInteger()
dize sayısal değilse bir istisna atar. Aynı durum toFloat()
/isFloat()
int
olduğundan beri eklemek istedim int
. Groovy, boks nedeniyle hala Integer sınıfını görüntüler, ancak örneğin 1.0'da mümkün olan null
bir a atayamazsınız int
. Null türünde bir yöntem çağrısı parametresi için argüman olarak zaten null kullanamadığınızdan, değişikliğin kritik olmadığını düşündük int
. Tüm bunlar Java'dan hala farklıdır, çünkü Java'da Basit bir atamayla Integer'ı Long'a dönüştüremez veya Long ile int alma yöntemini çağıramazsınız.
StringGroovyMethods.isInteger(String)
ve DefaultGroovyMethods.isInteger(CharSequence)
lehine itiraz edildi StringGroovyMethods.isInteger(CharSequence)
. Aynı şey geçerli toInteger()
.
Bunu yapmanın birkaç yolu, bu benim favorim:
def number = '123' as int
isInteger()
Önce kontrol edin .
Integer.parseInt(String)
da dize bir sayı değilse bir İstisna atar, bu yüzden soru göz önüne alındığında, bu bir "sorun" olarak
Bir ek sözleşme olarak Don'un cevap , harika bir eklese sadece .toInteger()
yöntemini String
s, aynı zamanda ekler toBigDecimal()
, toBigInteger()
, toBoolean()
, toCharacter()
, toDouble()
, toFloat()
, toList()
, ve toLong()
.
Aynı şekilde, harika da ekler is*
dönüş olanların tümüne tağşişi true
eğer String
söz konusu söz konusu biçime çözümlenebilir.
İlgili GDK sayfası burada.
isInteger()
, sonra yapın toInteger()
... yani, try
/ catch
bloğu eklemeyi tercih etmiyorsanız :) ama bunun için istisnalar kullanmak kötü bir fikirdir.
Groovy'nin son sürümlerinde tanıtıldığından emin değilim (ilk cevap oldukça eski), ancak şimdi kullanabilirsiniz:
def num = mystring?.isInteger() ? mystring.toInteger() : null
veya
def num = mystring?.isFloat() ? mystring.toFloat() : null
Sağlanan dize güvenilir değilse, tamsayılar yerine şamandıralar veya çiftler kullanmanızı öneririm.
mystring.toInteger()
bunun yerine yazmak istediniz mystring.toFloat()
. Yani def num = mystring?.isInteger() ? mystring.toInteger() : null
doğru olacaktır.
Groovy Java formunu gayet iyi kabul ediyor. Eğer bir Groovier yolu olup olmadığını soruyorsanız, gidilecek bir yol var Integer
.
Her ikisi de burada gösterilir:
String s = "99"
assert 99 == Integer.parseInt(s)
Integer i = s as Integer
assert 99 == i
ayrıca statik ithalat yapabilirsiniz
import static java.lang.Integer.parseInt as asInteger
ve bu kullanımdan sonra
String s = "99"
asInteger(s)
toInteger()
harika şekilde kullanılabilir, bunu kullanabilirsiniz.
Bunu başarmanın birkaç yolu. Örnekler aşağıdaki gibidir
a. return "22".toInteger()
b. if("22".isInteger()) return "22".toInteger()
c. return "22" as Integer()
d. return Integer.parseInt("22")
Bu yardımcı olur umarım
Mükemmel Stil dönüşümü:
Integer num = '589' as Integer
İstek parametreniz varsa:
Integer age = params.int('age')
İşte başka bir yol. İstisnaları sevmiyorsanız.
def strnumber = "100"
def intValue = strnumber.isInteger() ? (strnumber as int) : null
Kullanım şekli hala toInteger () olmalıdır, çünkü gerçekten kullanımdan kaldırılmamıştır.
int value = '99'.toInteger()
Dize sürümü kullanımdan kaldırıldı, ancak CharSequence, bir Dizenin uyguladığı bir Arabirimdir. Bu nedenle, bir dize kullanmak tamamdır, çünkü yöntem yalnızca CharSequence ile çalıştığında bile kodunuz çalışmaya devam eder. Aynı şey isInteger () için de geçerli
Başvuru için bu soruya bakın: Bir String'i CharSequence'a nasıl dönüştürebilirim?
Ben yorumladım, çünkü bu yönteme itiraz kavramı beni şaşırttı ve diğer insanlar için bundan kaçınmak istiyorum.
Harika bir dize tamsayı bir dize dönüştürme basit yolu aşağıdaki gibidir ...
String aa="25"
int i= aa.toInteger()
Şimdi "i" Tamsayı Değerine Sahiptir.
toInteger()
Dönüştürmek için yöntemi kullanın ...