ฉันจะแยกสตริงเป็นตัวเลขด้วย Dart ได้อย่างไร


125

ฉันต้องการแยกวิเคราะห์สตริงเช่น "1" หรือ "32.23" เป็นจำนวนเต็มและคู่ ฉันจะทำสิ่งนี้กับ Dart ได้อย่างไร?


นอกเหนือจากคำตอบด้านล่างหากสตริงของคุณมีตัวอักษรคุณสามารถทำได้เช่นนี้stackoverflow.com/a/61401948/614026
temirbek

คำตอบ:


204

int.parse()คุณสามารถแยกสตริงเข้ากับจำนวนเต็ม ตัวอย่างเช่น:

var myInt = int.parse('12345');
assert(myInt is int);
print(myInt); // 12345

โปรดทราบว่าint.parse()ยอมรับ0xสตริงที่นำหน้า มิฉะนั้นอินพุตจะถือว่าเป็นฐาน -10

คุณสามารถแยกวิเคราะห์สตริงเป็นคู่ด้วยdouble.parse(). ตัวอย่างเช่น:

var myDouble = double.parse('123.45');
assert(myDouble is double);
print(myDouble); // 123.45

parse() จะโยน FormatException หากไม่สามารถแยกวิเคราะห์อินพุตได้


คุณควรแยกวิเคราะห์จำนวนเต็มจากสตริงที่มีอักขระที่ไม่ถูกต้องในภายหลังอย่างไร เช่น "-01: 00" ที่ฉันต้องการรับ -1 หรือ "172 แอปเปิ้ล" ซึ่งฉันคาดว่าจะได้ 172 ใน JavaScript parseInt ("- 01:00") ทำงานได้ดี แต่ Dart ให้ข้อผิดพลาด มีวิธีง่ายๆโดยไม่ต้องตรวจสอบด้วยตนเองทีละอักขระหรือไม่? ขอบคุณ.
user1596274

93

ใน Dart 2 int.tryParseพร้อมใช้งาน

ส่งคืนค่าว่างสำหรับอินพุตที่ไม่ถูกต้องแทนที่จะโยน คุณสามารถใช้มันได้ดังนี้:

int val = int.tryParse(text) ?? defaultValue;

7
 void main(){
  var x = "4";
  int number = int.parse(x);//STRING to INT

  var y = "4.6";
  double doubleNum = double.parse(y);//STRING to DOUBLE

  var z = 55;
  String myStr = z.toString();//INT to STRING
}

int.parse () และ double.parse () สามารถทำให้เกิดข้อผิดพลาดเมื่อไม่สามารถแยกวิเคราะห์ String


2
int.parse()และdouble.parse()สามารถทำให้เกิดข้อผิดพลาดเมื่อไม่สามารถแยกวิเคราะห์ String โปรดอธิบายคำตอบของคุณอย่างละเอียดเพื่อให้ผู้อื่นสามารถเรียนรู้และเข้าใจโผได้ดีขึ้น
josxha

1
ขอบคุณที่พูดถึงมัน josxha ฉันเป็นมือใหม่อย่างแท้จริงใน Dart และฉันพยายามอย่างเต็มที่เพื่อช่วยเหลือผู้อื่นฉันคิดว่ามันจะเป็นคำตอบที่ง่ายที่สุดอยู่ดีขอบคุณ !!
Rajdeep12345678910

6

ตามโผ 2.6

ตัวเลือกonErrorพารามิเตอร์ของint.parseถูกเลิกใช้ ดังนั้นคุณควรใช้int.tryParseแทน

หมายเหตุ : double.parseเช่นเดียวกับ ดังนั้นควรใช้double.tryParseแทน

  /**
   * ...
   *
   * The [onError] parameter is deprecated and will be removed.
   * Instead of `int.parse(string, onError: (string) => ...)`,
   * you should use `int.tryParse(string) ?? (...)`.
   *
   * ...
   */
  external static int parse(String source, {int radix, @deprecated int onError(String source)});

ความแตกต่างคือจะint.tryParseส่งกลับnullหากสตริงต้นทางไม่ถูกต้อง

  /**
   * Parse [source] as a, possibly signed, integer literal and return its value.
   *
   * Like [parse] except that this function returns `null` where a
   * similar call to [parse] would throw a [FormatException],
   * and the [source] must still not be `null`.
   */
  external static int tryParse(String source, {int radix});

ดังนั้นในกรณีของคุณควรมีลักษณะดังนี้:

// Valid source value
int parsedValue1 = int.tryParse('12345');
print(parsedValue1); // 12345

// Error handling
int parsedValue2 = int.tryParse('');
if (parsedValue2 == null) {
  print(parsedValue2); // null
  //
  // handle the error here ...
  //
}


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.