Як розібрати рядок у число з Dart?


105

Я хотів би проаналізувати рядки типу "1" або "32,23" на цілі числа та подвійні. Як я можу це зробити за допомогою Dart?

Відповіді:


175

Ви можете розібрати рядок у ціле число 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") працює нормально, але Дарт видає помилку. Чи є якийсь простий спосіб, не перевіряючи вручну символ за символом? Дякую.
user1596274

86

У Dart 2 доступний int.tryParse .

Він повертає значення null для недійсних входів замість того, щоб кидати. Ви можете використовувати його так:

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

4

За дартсом 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 ...
  //
}

3
 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()може видавати помилку, коли не вдалося проаналізувати рядок. Будь ласка, докладно поясніть свою відповідь, щоб інші могли краще навчитися та зрозуміти дартс.
josxha

1
Дякую за те, що згадав про це josxha, я абсолютний новачок у Dart, і я намагаюся зробити все можливе, щоб допомогти іншим. Ну, я подумав, що це буде найпростіша відповідь, все одно Спасибі !!
Rajdeep12345678910

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.