ฉันมีที่แสดงถึงค่าจำนวนเต็มและต้องการที่จะแปลงเป็น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 intGroovy จะยังคงแสดงคลาส 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()วิธีการเพื่อให้Strings ก็ยังเพิ่ม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()วิธีการแปลง ...