Jak później przeanalizować liczbę całkowitą z ciągu zawierającego nieprawidłowe znaki? Np. „-01: 00”, gdzie chcę uzyskać -1, lub „172 jabłka”, gdzie spodziewałbym się 172. W JavaScript parseInt („- 01:00”) działa dobrze, ale Dart wyświetla błąd. Czy jest jakiś łatwy sposób bez ręcznego sprawdzania znak po znaku? Dzięki.
void main(){
var x = "4";
int number = int.parse(x);//STRING to INTvar y = "4.6";
double doubleNum = double.parse(y);//STRING to DOUBLEvar z = 55;
String myStr = z.toString();//INT to STRING
}
int.parse () i double.parse () mogą zgłosić błąd, gdy nie można przeanalizować ciągu
int.parse()i double.parse()może zgłosić błąd, gdy nie może przeanalizować ciągu. Opisz swoją odpowiedź, aby inni mogli lepiej się uczyć i rozumieć rzutki.
josxha
1
Dziękuję za wspomnienie o tym josxha, jestem absolutnym początkującym w Dart i staram się jak najlepiej pomagać innym. Cóż, pomyślałem, że to najprostsza odpowiedź, tak czy owak Dzięki !!
Rajdeep12345678910
4
Zgodnie z rzutką 2.6
Opcjonalny onErrorparametr int.parsejest przestarzały . Dlatego powinieneś int.tryParsezamiast tego użyć .
Uwaga : to samo dotyczy double.parse. Dlatego użyj double.tryParsezamiast tego.
/**
* ...
** The [onError] parameter is deprecated and will be removed.
* Instead of `int.parse(string, onError: (string) => ...)`,
* youshould use `int.tryParse(string) ?? (...)`.
** ...
*/externalstaticint parse(String source, {int radix, @deprecatedint onError(String source)});
Różnica polega na tym, że int.tryParsezwraca, nulljeśli ciąg źródłowy jest nieprawidłowy.
/**
* 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`.
*/externalstaticint tryParse(String source, {int radix});
Tak więc w Twoim przypadku powinno to wyglądać tak:
// Valid source valueint parsedValue1 = int.tryParse('12345');
print(parsedValue1); // 12345// Error handlingint parsedValue2 = int.tryParse('');
if (parsedValue2 == null) {
print(parsedValue2); // null//// handle the error here ...//
}
Odpowiedzi:
Możesz przeanalizować ciąg do liczby całkowitej za pomocą
int.parse()
. Na przykład:var myInt = int.parse('12345'); assert(myInt is int); print(myInt); // 12345
Zauważ, że
int.parse()
akceptuje0x
ciągi z prefiksem. W przeciwnym razie wejście jest traktowane jako podstawa-10.Możesz przetworzyć ciąg na podwójny za pomocą
double.parse()
. Na przykład:var myDouble = double.parse('123.45'); assert(myDouble is double); print(myDouble); // 123.45
parse()
zgłosi FormatException, jeśli nie może przeanalizować danych wejściowych.źródło
W Dart 2 dostępny jest int.tryParse .
Zwraca null dla nieprawidłowych danych wejściowych zamiast rzucania. Możesz go używać w ten sposób:
int val = int.tryParse(text) ?? defaultValue;
źródło
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 }
źródło
int.parse()
idouble.parse()
może zgłosić błąd, gdy nie może przeanalizować ciągu. Opisz swoją odpowiedź, aby inni mogli lepiej się uczyć i rozumieć rzutki.Zgodnie z rzutką 2.6
Opcjonalny
onError
parametrint.parse
jest przestarzały . Dlatego powinieneśint.tryParse
zamiast tego użyć .Uwaga : to samo dotyczy
double.parse
. Dlatego użyjdouble.tryParse
zamiast tego./** * ... * * 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)});
Różnica polega na tym, że
int.tryParse
zwraca,null
jeśli ciąg źródłowy jest nieprawidłowy./** * 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});
Tak więc w Twoim przypadku powinno to wyglądać tak:
// 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 ... // }
źródło
możesz analizować ciąg za pomocą
int.parse('your string value');
.Przykład:-
int num = int.parse('110011'); print(num); // prints 110011 ;
źródło