ฉันมีที่แสดงถึงค่าจำนวนเต็มและต้องการที่จะแปลงเป็นString
int
มีค่าเทียบเท่าของจาวาของ Java Integer.parseInt(String)
หรือไม่?
ฉันมีที่แสดงถึงค่าจำนวนเต็มและต้องการที่จะแปลงเป็นString
int
มีค่าเทียบเท่าของจาวาของ Java Integer.parseInt(String)
หรือไม่?
คำตอบ:
ใช้toInteger()
วิธีการแปลง a String
เป็นInteger
เช่น
int value = "99".toInteger()
ทางเลือกอื่นซึ่งหลีกเลี่ยงการใช้วิธีการที่เลิกใช้แล้ว (ดูด้านล่าง) คือ
int value = "66" as Integer
หากคุณต้องการตรวจสอบว่าString
สามารถแปลงก่อนดำเนินการแปลงใช้
String number = "66"
if (number.isInteger()) {
int value = number as Integer
}
ใน Groovy เวอร์ชันล่าสุด toInteger()
วิธีการวิธีหนึ่งถูกเลิกใช้แล้ว ข้อมูลต่อไปนี้นำมาจาก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);
}
คุณสามารถบังคับให้มีการเรียกเมธอดเวอร์ชันที่ไม่คัดค้านโดยใช้สิ่งที่น่ากลัวเช่น:
int num = ((CharSequence) "66").toInteger()
โดยส่วนตัวแล้วฉันชอบ:
int num = 66 as Integer
isInteger()
ก่อนเพราะtoInteger()
จะทำให้เกิดข้อยกเว้นถ้าสตริงไม่ได้เป็นตัวเลข ใช้กับtoFloat()
/isFloat()
int
int
Groovy จะยังคงแสดงคลาส Integer เนื่องจากการชกมวย แต่คุณจะไม่สามารถกำหนดให้null
กับint
ซึ่งเป็นไปได้ใน 1.0 เราถือว่าการเปลี่ยนแปลงนั้นไม่สำคัญเนื่องจากคุณไม่สามารถใช้ null เป็นอาร์กิวเมนต์สำหรับพารามิเตอร์การเรียกเมธอดเป็นประเภทint
ได้ ทั้งหมดนี้ยังคงแตกต่างจาก Java เช่นเดียวกับใน Java คุณไม่สามารถแปลงจำนวนเต็มเป็น Long ได้โดยการมอบหมายอย่างง่ายหรือเรียกวิธีการรับค่า int ด้วย Long
StringGroovyMethods.isInteger(String)
และจะเลิกในความโปรดปรานของDefaultGroovyMethods.isInteger(CharSequence)
เดียวกันจะไปสำหรับStringGroovyMethods.isInteger(CharSequence)
toInteger()
มีหลายวิธีที่จะทำสิ่งนี้สิ่งที่ฉันชอบ:
def number = '123' as int
isInteger()
ก่อน
Integer.parseInt(String)
ที่ยังพ่นยกเว้นถ้าสตริงไม่เป็นตัวเลขเพื่อให้ได้รับคำถามที่ฉันไม่ได้พิจารณาเรื่องนี้ "ปัญหา"
ในฐานะที่เป็นภาคผนวกคำตอบที่ดอนไม่เพียง แต่แรงเพิ่ม.toInteger()
วิธีการเพื่อให้String
s ก็ยังเพิ่มtoBigDecimal()
, toBigInteger()
, toBoolean()
, toCharacter()
, toDouble()
, toFloat()
, และtoList()
toLong()
ในหลอดเลือดดำเดียวกัน groovy ยังเพิ่มis*
eqivalents ให้กับผู้ที่กลับมาtrue
หากString
คำถามที่สามารถแยกวิเคราะห์เป็นรูปแบบในคำถาม
หน้า GDK ที่เกี่ยวข้องอยู่ที่นี่
isInteger()
แล้วทำtoInteger()
... นั่นคือถ้าคุณไม่ต้องการเพิ่มtry
/ catch
บล็อก :) แต่การใช้ข้อยกเว้นสำหรับสิ่งนี้เป็นแนวคิดที่ไม่ดี
ฉันไม่แน่ใจว่ามันถูกเปิดตัวใน groovy รุ่นล่าสุด (คำตอบเริ่มต้นค่อนข้างเก่า) แต่ตอนนี้คุณสามารถใช้:
def num = mystring?.isInteger() ? mystring.toInteger() : null
หรือ
def num = mystring?.isFloat() ? mystring.toFloat() : null
ฉันขอแนะนำให้ใช้ float หรือ double แทนจำนวนเต็มในกรณีที่สตริงที่ให้ไว้ไม่น่าเชื่อถือ
mystring.toInteger()
mystring.toFloat()
ดังนั้นdef num = mystring?.isInteger() ? mystring.toInteger() : null
จะถูกต้อง
Groovy ยอมรับรูปแบบ Java ได้ดี หากคุณกำลังถามว่ามีความเป็นGroovierInteger
วิธีมีวิธีที่จะไป
ทั้งสองแสดงไว้ที่นี่:
String s = "99"
assert 99 == Integer.parseInt(s)
Integer i = s as Integer
assert 99 == i
นอกจากนี้คุณสามารถนำเข้าคงที่
import static java.lang.Integer.parseInt as asInteger
และหลังการใช้งานนี้
String s = "99"
asInteger(s)
toInteger()
วิธีการนี้มีให้ในแบบ Groovy คุณสามารถใช้มันได้
หลายวิธีในการบรรลุเป้าหมายนี้ ตัวอย่างมีดังนี้
a. return "22".toInteger()
b. if("22".isInteger()) return "22".toInteger()
c. return "22" as Integer()
d. return Integer.parseInt("22")
หวังว่านี่จะช่วยได้
การแปลงสไตล์ Groovy:
Integer num = '589' as Integer
หากคุณมีพารามิเตอร์คำขอ:
Integer age = params.int('age')
def str = "32"
int num = str as Integer
นี่คือวิธีอื่น ถ้าคุณไม่ชอบข้อยกเว้น
def strnumber = "100"
def intValue = strnumber.isInteger() ? (strnumber as int) : null
วิธีการใช้ยังคงเป็น toInteger () เนื่องจากไม่ได้คัดค้านอย่างแท้จริง
int value = '99'.toInteger()
เวอร์ชั่น String เลิกใช้แล้ว แต่ CharSequence เป็นอินเทอร์เฟซที่ String ดำเนินการ ดังนั้นการใช้ String ก็โอเคเพราะรหัสของคุณจะยังใช้งานได้แม้ว่าเมธอดจะทำงานกับ CharSequence เท่านั้น ไปเหมือนกันสำหรับ isInteger ()
ดูคำถามนี้สำหรับการอ้างอิง: วิธีแปลงสตริงเป็น CharSequence ได้อย่างไร
ฉันแสดงความคิดเห็นเพราะความคิดของการเลิกใช้วิธีการนี้ทำให้ฉันสับสนและฉันต้องการหลีกเลี่ยงปัญหานี้สำหรับคนอื่น ๆ
วิธีที่ง่ายกว่าในการแปลงสตริงเป็นจำนวนเต็มใน Groovy มีดังต่อไปนี้ ...
String aa="25"
int i= aa.toInteger()
ตอนนี้ "i" ถือค่าจำนวนเต็ม
toInteger()
วิธีการแปลง ...