Dart/Flutter — 문자열을 숫자로 파싱하는 방법
이 게시물에서는 문자열을 숫자(정수, 이중 또는 둘 다)로 구문 분석/변환하는 몇 가지 방법을 알아보겠습니다.
1. parse() 메서드 사용(권장하지 않음)
/// Parse string to integer
int stringToInt_parse(String input) {
return int.parse(input, onError: (error) {
// Return null if input string is invalid.
// Change to default value if you want.
return null;
});
/// Parse string to double
double stringToDouble_parse(String input) {
return double.parse(input, (error) {
// Return null if input string is invalid.
// Change to default value if you want.
return null;
});
}
/// Parse string to number
num stringToNumber_parse(String input) {
return num.parse(input, (error) {
// Return null if input string is invalid.
// Change to default value if you want.
return null;
});
}
테스트
void main() {
final testInt = '100';
final testDouble = '100.1';
final testInvalidNumber = 'a';
print(stringToInt_parse(testInt)); // 100
print(stringToDouble_parse(testInt)); // 100.0
print(stringToNumber_parse(testInt)); // 100
print(stringToInt_parse(testDouble)); // null
print(stringToDouble_parse(testDouble)); // 100.1
print(stringToNumber_parse(testDouble)); // 100.1
print(stringToInt_parse(testInvalidNumber)); // null
print(stringToDouble_parse(testInvalidNumber)); // null
print(stringToNumber_parse(testInvalidNumber)); // null
}
메모:
/// Parse string to integer
int stringToInt_parse(String input) {
return int.parse(input, onError: (error) {
// Return null if input string is invalid.
// Change to default value if you want.
return null;
});
/// Parse string to double
double stringToDouble_parse(String input) {
return double.parse(input, (error) {
// Return null if input string is invalid.
// Change to default value if you want.
return null;
});
}
/// Parse string to number
num stringToNumber_parse(String input) {
return num.parse(input, (error) {
// Return null if input string is invalid.
// Change to default value if you want.
return null;
});
}
void main() {
final testInt = '100';
final testDouble = '100.1';
final testInvalidNumber = 'a';
print(stringToInt_parse(testInt)); // 100
print(stringToDouble_parse(testInt)); // 100.0
print(stringToNumber_parse(testInt)); // 100
print(stringToInt_parse(testDouble)); // null
print(stringToDouble_parse(testDouble)); // 100.1
print(stringToNumber_parse(testDouble)); // 100.1
print(stringToInt_parse(testInvalidNumber)); // null
print(stringToDouble_parse(testInvalidNumber)); // null
print(stringToNumber_parse(testInvalidNumber)); // null
}
메모:
// Look at onError:
int.parse(input, onError: (error) {
// ...
});
// No need onError:
double.parse(input, (error) {
// ...
});
// No need onError:
num.parse(input, (error) {
// ...
});
/// Parse string to integer without handling error
/// -> throw exception at runtime.
int stringToInt_parseWithoutErrorHandle(String input) {
return int.parse(input);
}
void main() {
final testInvalidNumber = 'a';
print(stringToInt_parseWithoutErrorHandle(
testInvalidNumber)
);
}
예외:
Unhandled exception:
FormatException: Invalid radix-10 number (at character 1)
a
^
#0 int._throwFormatException (dart:core-patch/integers_patch.dart:131:5)
#1 int._parseRadix (dart:core-patch/integers_patch.dart:142:16)
#2 int._parse (dart:core-patch/integers_patch.dart:100:12)
#3 int.parse (dart:core-patch/integers_patch.dart:63:12)
#4 stringToInt_parseWithoutErrorHandle (package:dart/core/string/string_to_number.dart:58:14)
#5 main (package:dart/core/string/string_to_number.dart:18:9)
#6 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:301:19)
#7 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)
Unhandled exception:
FormatException: Invalid radix-10 number (at character 1)
a
^
#0 int._throwFormatException (dart:core-patch/integers_patch.dart:131:5)
#1 int._parseRadix (dart:core-patch/integers_patch.dart:142:16)
#2 int._parse (dart:core-patch/integers_patch.dart:100:12)
#3 int.parse (dart:core-patch/integers_patch.dart:63:12)
#4 stringToInt_parseWithoutErrorHandle (package:dart/core/string/string_to_number.dart:58:14)
#5 main (package:dart/core/string/string_to_number.dart:18:9)
#6 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:301:19)
#7 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)
* ...
* The [onError] parameter is deprecated and will be removed.
* Instead of `int.parse(string, onError: (string) => ...)`,
* you should use `int.tryParse(string) ?? (...)`.
* ...
위에서 언급했듯이 대신 tryParse() 메서드를 사용해야 합니다. 바로 그 방법으로 넘어가겠습니다.
2. tryParse() 메서드 사용
tryParse() 메서드를 사용할 때 입력 문자열만 제공하면 됩니다. 입력이 잘못된 경우 프로그램은 null을 반환합니다. 이것이 tryParse()와 parse()(onError 메서드를 처리하지 않으면 예외가 발생함)의 차이점입니다.
int stringToInt_tryParse(String input) {
return int.tryParse(input);
}
double stringToDouble_tryParse(String input) {
return double.tryParse(input);
}
num stringToNumber_tryParse(String input) {
return num.tryParse(input);
}
테스트
void main() {
final testInt = '100';
final testDouble = '100.1';
final testInvalidNumber = 'a';
print(stringToInt_tryParse(testInt)); // 100
print(stringToDouble_tryParse(testInt)); // 100.0
print(stringToNumber_tryParse(testInt)); // 100
print(stringToDouble_tryParse(testInt)); // 100.0
print(stringToDouble_tryParse(testDouble)); // 100.1
print(stringToNumber_tryParse(testDouble)); // 100.1
print(stringToInt_tryParse(testInvalidNumber)); // null
print(stringToDouble_tryParse(testInvalidNumber)); // null
print(stringToNumber_tryParse(testInvalidNumber)); // null
}
3. (보너스) 확장 방법 사용
확장 메서드가 무엇인지 모르는 경우 기존 라이브러리/클래스에 더 많은 기능을 추가하는 방법입니다. 우리의 경우 이 기술을 사용하여 String 클래스에 3개의 메서드를 추가합니다.
extension StringExtension on String {
int toInt() {
return int.tryParse(this);
}
double toDouble() {
return double.tryParse(this);
}
num toNumber() {
return num.tryParse(this);
}
}
위의 확장을 만든 후 이제 String에는 다른 종료 메서드로 사용할 수 있는 메서드가 3개 더 있습니다. 너무 멋지다! 😎 😎 😎
void main() {
final testInt = '100';
final testDouble = '100.1';
final testInvalidNumber = 'a';
print(testInt.toInt()); // 100
print(testInt.toDouble()); // 100.0
print(testInt.toNumber()); // 100
print(testDouble.toInt()); // null
print(testDouble.toDouble()); // 100.1
print(testDouble.toNumber()); // 100.1
print(testInvalidNumber.toInt()); // null
print(testInvalidNumber.toDouble()); // null
print(testInvalidNumber.toNumber()); // null
}
그게 다야!
my blog에서 원본 기사를 찾을 수 있습니다.
Reference
이 문제에 관하여(Dart/Flutter — 문자열을 숫자로 파싱하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/thphuc/dart-flutter-how-to-parse-string-to-number-j79
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
int stringToInt_tryParse(String input) {
return int.tryParse(input);
}
double stringToDouble_tryParse(String input) {
return double.tryParse(input);
}
num stringToNumber_tryParse(String input) {
return num.tryParse(input);
}
void main() {
final testInt = '100';
final testDouble = '100.1';
final testInvalidNumber = 'a';
print(stringToInt_tryParse(testInt)); // 100
print(stringToDouble_tryParse(testInt)); // 100.0
print(stringToNumber_tryParse(testInt)); // 100
print(stringToDouble_tryParse(testInt)); // 100.0
print(stringToDouble_tryParse(testDouble)); // 100.1
print(stringToNumber_tryParse(testDouble)); // 100.1
print(stringToInt_tryParse(testInvalidNumber)); // null
print(stringToDouble_tryParse(testInvalidNumber)); // null
print(stringToNumber_tryParse(testInvalidNumber)); // null
}
3. (보너스) 확장 방법 사용
확장 메서드가 무엇인지 모르는 경우 기존 라이브러리/클래스에 더 많은 기능을 추가하는 방법입니다. 우리의 경우 이 기술을 사용하여 String 클래스에 3개의 메서드를 추가합니다.
extension StringExtension on String {
int toInt() {
return int.tryParse(this);
}
double toDouble() {
return double.tryParse(this);
}
num toNumber() {
return num.tryParse(this);
}
}
위의 확장을 만든 후 이제 String에는 다른 종료 메서드로 사용할 수 있는 메서드가 3개 더 있습니다. 너무 멋지다! 😎 😎 😎
void main() {
final testInt = '100';
final testDouble = '100.1';
final testInvalidNumber = 'a';
print(testInt.toInt()); // 100
print(testInt.toDouble()); // 100.0
print(testInt.toNumber()); // 100
print(testDouble.toInt()); // null
print(testDouble.toDouble()); // 100.1
print(testDouble.toNumber()); // 100.1
print(testInvalidNumber.toInt()); // null
print(testInvalidNumber.toDouble()); // null
print(testInvalidNumber.toNumber()); // null
}
그게 다야!
my blog에서 원본 기사를 찾을 수 있습니다.
Reference
이 문제에 관하여(Dart/Flutter — 문자열을 숫자로 파싱하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/thphuc/dart-flutter-how-to-parse-string-to-number-j79
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
extension StringExtension on String {
int toInt() {
return int.tryParse(this);
}
double toDouble() {
return double.tryParse(this);
}
num toNumber() {
return num.tryParse(this);
}
}
void main() {
final testInt = '100';
final testDouble = '100.1';
final testInvalidNumber = 'a';
print(testInt.toInt()); // 100
print(testInt.toDouble()); // 100.0
print(testInt.toNumber()); // 100
print(testDouble.toInt()); // null
print(testDouble.toDouble()); // 100.1
print(testDouble.toNumber()); // 100.1
print(testInvalidNumber.toInt()); // null
print(testInvalidNumber.toDouble()); // null
print(testInvalidNumber.toNumber()); // null
}
Reference
이 문제에 관하여(Dart/Flutter — 문자열을 숫자로 파싱하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/thphuc/dart-flutter-how-to-parse-string-to-number-j79텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)