소개
Java 에서 문자열 (string) 은 다양한 작업에 사용되는 빈번한 데이터 타입입니다. 텍스트 필드나 텍스트 영역에서 입력을 저장하는 데 자주 사용됩니다. 이러한 소스에서 입력된 데이터가 유효한 숫자 데이터인지 확인하는 것이 중요합니다. 이 Lab 에서는 Java 에서 문자열이 유효한 숫자인지 확인하는 다양한 방법을 배웁니다.
Java 에서 문자열 (string) 은 다양한 작업에 사용되는 빈번한 데이터 타입입니다. 텍스트 필드나 텍스트 영역에서 입력을 저장하는 데 자주 사용됩니다. 이러한 소스에서 입력된 데이터가 유효한 숫자 데이터인지 확인하는 것이 중요합니다. 이 Lab 에서는 Java 에서 문자열이 유효한 숫자인지 확인하는 다양한 방법을 배웁니다.
파싱은 Java 에서 문자열이 숫자인지 확인하는 가장 쉽고 좋은 방법입니다. Java 는 Integer.parseInt(String number), Double.parseDouble(String number), Float.parseFloat(String number), Long.parseLong(String number) 과 같은 다양한 내장 파싱 메서드를 제공하며, 이는 해당 숫자 데이터 타입 변환기 역할을 합니다.
public static boolean isStringNumeric(String number) {
boolean isNumeric;
if(number == null) {
isNumeric = false;
} else {
try {
Double num = Double.parseDouble(number);
isNumeric = true;
} catch(NumberFormatException e) {
isNumeric = false;
}
}
return isNumeric;
}
public static void main(String[] args) {
String num1 = "1001";
String num2 = "-101";
String num3 = "1a10";
String num4 = null;
System.out.println("String " + num1 + " is numeric: " + isStringNumeric(num1));
System.out.println("String " + num2 + " is numeric: " + isStringNumeric(num2));
System.out.println("String " + num3 + " is numeric: " + isStringNumeric(num3));
System.out.println("String " + num4 + " is numeric: " + isStringNumeric(num4));
}
코드를 실행하려면:
javac NumericStringParser.java를 사용하여 코드를 컴파일합니다.java NumericStringParser를 사용하여 코드를 실행합니다.정규 표현식은 문자열을 일치시키고 숫자인지 여부를 결정하는 데 사용할 수 있습니다. 문자열의 matches() 메서드를 사용하여 문자열 숫자와 정규 표현식을 비교합니다. 문자열을 일치시키기 위해 정규 표현식 "-?\\d+(\\.\\d+)?"가 사용됩니다. 여기서 -?는 숫자가 음수인지 여부를 나타내고, \\d+ 는 문자열에서 하나 이상의 숫자를 검색하며, (\\.\\d+)?는 소수를 일치시키는 데 사용됩니다. 여기서 \\.는 소수점을 검색하고, \\d+ 는 소수점 뒤에 하나 이상의 숫자를 찾습니다.
public static boolean isStringNumeric(String number) {
boolean isNumeric;
String regex = "-?\\d+(\\.\\d+)?";
if(number == null) {
isNumeric = false;
} else if(number.matches(regex)) {
isNumeric = true;
} else {
isNumeric = false;
}
return isNumeric;
}
public static void main(String[] args) {
String num1 = "1001";
String num2 = "-101";
String num3 = "1a10";
String num4 = null;
System.out.println("String " + num1 + " is numeric: " + isStringNumeric(num1));
System.out.println("String " + num2 + " is numeric: " + isStringNumeric(num2));
System.out.println("String " + num3 + " is numeric: " + isStringNumeric(num3));
System.out.println("String " + num4 + " is numeric: " + isStringNumeric(num4));
}
코드를 실행하려면:
javac NumericStringRegex.java를 사용하여 코드를 컴파일합니다.java NumericStringRegex를 사용하여 코드를 실행합니다.Apache Commons 라이브러리는 문자열이 숫자인지 확인하는 몇 가지 메서드를 제공합니다.
isCreatable() 메서드는 문자열이 숫자인지 확인하는 간단하고 편리한 메서드입니다. 또한 0x 또는 0X 로 시작하는 16 진수, 0 으로 시작하는 8 진수, 문자 e 를 사용하는 과학적 표기법의 숫자 문자열을 허용하며, 타입 한정자로 표시된 숫자도 허용합니다.
import org.apache.commons.lang3.math.NumberUtils;
public static void main(String[] args) {
String num1 = "a10c";
String num2 = "-104";
String num3 = "100";
String num4 = "0xA10";
System.out.println("String " + num1 + " is numeric: " + NumberUtils.isCreatable(num1));
System.out.println("String " + num2 + " is numeric: " + NumberUtils.isCreatable(num2));
System.out.println("String " + num3 + " is numeric: " + NumberUtils.isCreatable(num3));
System.out.println("String " + num4 + " is numeric: " + NumberUtils.isCreatable(num4));
}
isParsable() 메서드는 문자열이 파싱 가능한지 확인하는 데 사용됩니다. isCreatable() 메서드와 달리 16 진수 또는 과학적 표기법으로는 작동하지 않습니다.
import org.apache.commons.lang3.math.NumberUtils;
public static void main(String[] args) {
String num1 = "a10c";
String num2 = "-104";
String num3 = "100";
String num4 = "0xA10";
System.out.println("String " + num1 + " is numeric: " + NumberUtils.isParsable(num1));
System.out.println("String " + num2 + " is numeric: " + NumberUtils.isParsable(num2));
System.out.println("String " + num3 + " is numeric: " + NumberUtils.isParsable(num3));
System.out.println("String " + num4 + " is numeric: " + NumberUtils.isParsable(num4));
}
isNumeric() 메서드는 유니코드 숫자를 확인하고, 숫자 문자열이 음수를 나타내거나 소수점을 포함하는 경우 false 를 반환합니다. 이 메서드는 양의 정수만 확인하려는 경우에만 고려해야 합니다.
import org.apache.commons.lang3.StringUtils;
public static void main(String[] args) {
String num1 = "a10c";
String num2 = "-104";
String num3 = "100";
String num4 = "0.11";
System.out.println("String " + num1 + " is numeric: " + StringUtils.isNumeric(num1));
System.out.println("String " + num2 + " is numeric: " + StringUtils.isNumeric(num2));
System.out.println("String " + num3 + " is numeric: " + StringUtils.isNumeric(num3));
System.out.println("String " + num4 + " is numeric: " + StringUtils.isNumeric(num4));
}
isNumericSpace() 메서드는 공백도 확인합니다. 문자열이 "19 8"과 같은 경우 이 메서드는 true 를 반환합니다. 문자열이 공백으로만 구성된 경우에도 true 를 반환합니다.
import org.apache.commons.lang3.StringUtils;
public static void main(String[] args) {
String num1 = "a10c";
String num2 = " ";
String num3 = "100";
String num4 = "0.11";
System.out.println("String " + num1 + " is numeric: " + StringUtils.isNumeric(num1));
System.out.println("String " + num2 + " is numeric: " + StringUtils.isNumeric(num2));
System.out.println("String " + num3 + " is numeric: " + StringUtils.isNumeric(num3));
System.out.println("String " + num4 + " is numeric: " + StringUtils.isNumeric(num4));
}
이 랩에서는 Java 에서 문자열이 숫자인지 확인하는 여러 가지 방법과 이를 사용하는 방법을 배웠습니다. Java 에서 문자열이 숫자인지 확인하기 위해 내장 파싱 메서드, 정규 표현식 (regular expressions), 그리고 Apache Commons 라이브러리를 사용했습니다.