중점 처리 내용
입력 받은 데이터를 기반으로1. 단계
데이터를 입력받았는가 확인(입력 값 없을 경우에 처리)2. 단계
객체 데이터에서 문자열인지 정수형인지 확인
(데이터 형변환 처리)3. 단계
정규식 비교를 통해 영문 & 한글 혼합인지 여부 확인
정규식 패턴 집합에 대한 개별 비교 처리 기능
(전화번호 및 이메일 주소 한글과 숫자 영문 처리)4. 단계
최종적으로
데이터 입력 결과에 문제가 없는지 확인
'Y' 나 'N' 이 아닌 오입력 방지 기능까지 처리5. 단계
정수형과 문자열 구별을 정확하게 처리 하였는지 다시 한번 확인
프로그램 실행 출력 결과물
>>System Message : Please Input Data...
>>Input Error : Input Data is Blank.
>>Please Check Your Input Data Again.
>>System Info : From String Object Returned [ ] Data.
>>System Message : Process Retry
>>System Message : Please Input Data...
010-1234-5678
>>System Info : From String Object Returned [ 010-1234-5678 ] Data.
>>System Message : Value : 010-1234-5678
>>System Message : Are you sure decide Your Data ?
아니요
>>Input Error : Decision Must Be ( Y or N )
>>System Message : Process Retry
>>System Message : Please Input Data...
02-123-4567
>>System Info : From String Object Returned [ 02-123-4567 ] Data.
>>System Message : Value : 02-123-4567
>>System Message : Are you sure decide Your Data ?
N
>>System Message : User denied InputData.
>>System Message : Process Retry
>>System Message : Please Input Data...
anhesu4@gmail.com
>>System Info : From String Object Returned [ anhesu4@gmail.com ] Data.
>>System Message : Value : anhesu4@gmail.com
>>System Message : Are you sure decide Your Data ?
N
>>System Message : User denied InputData.
>>System Message : Process Retry
>>System Message : Please Input Data...
로켓Rocket
>>System Info : From String Object Returned [ 로켓Rocket ] Data.
>>System Message : Value : 로켓Rocket
>>Input Error : You use English mixed with Hangul.
>>Please Check Input Data Again.
>>System Message : Value : 로켓Rocket
>>System Message : Process Retry
>>System Message : Please Input Data...
서울시 강동구 명일동 아무개 맨션 101동 1104호
>>System Info : From String Object Returned [ 서울시 강동구 명일동 아무개 맨션 101동 1104호 ] Data.
>>System Message : Value : 서울시 강동구 명일동 아무개 맨션 101동 1104호
>>System Message : Are you sure decide Your Data ?
N
>>System Message : User denied InputData.
>>System Message : Process Retry
>>System Message : Please Input Data...
안희수
>>System Info : From String Object Returned [ 안희수 ] Data.
>>System Message : Value : 안희수
>>System Message : Are you sure decide Your Data ?
N
>>System Message : User denied InputData.
>>System Message : Process Retry
>>System Message : Please Input Data...
1000
>>System Info : From Intiger Object Returned [ 1000 ] Data.
>>System Message : Value : 1000
>>System Message : Are you sure decide Your Data ?
N
>>System Message : User denied InputData.
>>System Message : Process Retry
>>System Message : Please Input Data...
자바 프로그래밍
>>System Info : From String Object Returned [ 자바 프로그래밍 ] Data.
>>System Message : Value : 자바 프로그래밍
>>System Message : Are you sure decide Your Data ?
ㅛ
>>Input Error : Decision Must Be ( Y or N )
>>System Message : Process Retry
>>System Message : Please Input Data...
anhesu
>>System Info : From String Object Returned [ anhesu ] Data.
>>System Message : Value : anhesu
>>System Message : Are you sure decide Your Data ?
Y
>>System Message : User decided InputData.
>>System Message : Value : anhesu
>>System Message : Process Exit
1. main
프로그렘 실행 메인
package study;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class main {
public static void main(String[] args) {
boolean _repeat = false;
Process proc = new Process();
_repeat = true;
System.out.println(">>System Message : Please Input Data...");
while(_repeat) {
/* ReadData
* 입력값이 정수형인지 문자열인지 판단하는 기능
* 입력 값에 아무런 값도 입력이 되지 않았는지 판단하는 기능
* */
_repeat = proc.ReadData();
if(_repeat) {
System.out.println("\n>>System Message : Process Retry");
System.out.println("\n>>System Message : Please Input Data...");
} else {
System.out.println("\n>>System Message : Process Exit");
}
}
}
}
2. DataProcess
데이터 전처리 클래스
package study;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
// 데이터 전처리 클래스
public class DataProcess {
private Object RawData = null; // 원시 데이터
private String strData = ""; // 문자열 데이터
private int intData = 0; // 정수형 데이터(값을 비교할 때 문자열을 매번 정수형으로 변환하는 것을 방지)
public boolean isNumber= false; // 문자열 여부
public boolean retry = false; // 재시도 여부
// input 데이터를 입력받아서 문자열인지 정수인지 판단
public void getData(String getData) throws IOException {
RawData = getData;
if(RawData.getClass() == String.class) {
try {
if(!getData.toString().equals("")) {
String pattern = "^[0-9]*$"; // 정수인지 여부만 판단하는 정규식
if(getData.toString().matches(pattern)) {
intData = Integer.parseInt(getData.toString());
strData = String.valueOf(intData);
isNumber = true;
retry = false;
} else {
strData = getData.toString();
isNumber = false;
retry = false;
}
} else {
strData = getData.toString();
isNumber = false;
retry = false;
}
}catch (NumberFormatException e) {
intData = 0;
strData = getData.toString();
isNumber = false;
retry = true;
e.printStackTrace();
}
}
if(strData.isEmpty()) {
System.out.print(">>Input Error : Input Data is Blank.\n>>Please Check Your Input Data Again.");
retry = true; // 입력받은 값이 0 이나 공백일 경우에만 재시도
} else {
retry = false;
}
}
// 입력 받은 값의 내용을 반환하는 메소드
public String ReturnValue() {
String Value = "";
if(isNumber) {
System.out.print(String.format("\n>>System Info : From Intiger Object Returned [ %d ] Data.", intData));
Value = String.valueOf(intData);
} else {
System.out.print(String.format( "\n>>System Info : From String Object Returned [ %s ] Data.", strData));
Value = strData;
}
return Value;
}
// 알파벳과 한글이 혼용되었는지 판별하는 메소드
public boolean combineAlphabet(String inputData) {
boolean combine = true;
String [] PatternCase = {
"^[a-zA-Z0-9]*$" // 알파벳과 특수문자 숫자 조합은 아이디 혹은 이메일 처리를 위해 혼용이 필요
,"^[ㄱ-ㅎ가-힣]*$" // 순수 한글 패턴
,"^[ㄱ-ㅎ가-힣0-9\\W]*$" // 한글과 숫자 조합은 이름과 주소를 위해 혼용이 필요
,"^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$" // 이메일 패턴
,"^\\d{3}-\\d{3,4}-\\d{4}$" // 휴대전화 패턴
,"^\\d{2,3}-\\d{3,4}-\\d{4}$" // 일반 전화 번호 패턴
};
// 처음에는 혼합됬다는 가정하에 반복문을 통해서 한 가지라도 정규식일 일치하게 되면 혼합되지 않은 것으로 간주함
for(String pattern : PatternCase) {
if(inputData.toString().matches(pattern)){
combine = false;
}
}
return combine;
}
// 현재 입력 받은 값이 최종적으로 맞는지 판단 후 재입력 여부를 물어보는 메소드
public boolean ConfirmInputData() {
boolean disagreeData = false; // 입력받은 갑을 인정 못함 다시 입력
System.out.print("\n>>System Message : Are you sure decide Your Data ?\n");
Scanner sc = new Scanner(System.in);
String YesNo = sc.next(); // Y or N 한 단어만 사용
if(!YesNo.equals("Y")) { //Y 가 아닌 것은 전부 재시도
if(!YesNo.equals("N")) { // N 으로 입력하지 않은 입력에 대한 오류 처리
System.out.print("\n>>Input Error : Decision Must Be ( Y or N )");
} else {
System.out.print("\n>>System Message : User denied InputData.");
}
disagreeData = true;
}
return disagreeData;
}
}
3. Process.java
데이터 읽기 & 쓰기 클래스
package study;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 데이터 전처리 과정에서 읽어온 데이터를 가지고 행위를 하는 클래스
public class Process {
public boolean ReadData() {
boolean retry = false; // 잘못된 데이터 입력에 대한 재시도
boolean confirm = false; // 현재 입력한 데이터가 맞는지 확인하고 재입력 할 것인지 판단
boolean next = false; // 다음 입력 단계가 있을 경우 지속하여 다른 기능을 실행함
DataProcess process = new DataProcess();
try {
InputStreamReader Ir = new InputStreamReader(System.in);
BufferedReader Br = new BufferedReader(Ir);
process.getData(Br.readLine());
retry = process.retry;
} catch (IOException e) {
e.printStackTrace();
retry = true;
}
String readData = process.ReturnValue(); // 반환값을 알기 위해 일는 행위를 반복적으로 하는 것을 방지
if(!readData.equals("")) {
System.out.print("\n>>System Message : Value : " + readData);
retry = false; // 입력받은 값이 있을 경우에는 읽기 재시도를 하지 않음
if(!process.isNumber) { // 정수형 데이터가 아닌 경우
// strData 가 알파벳과 한글을 혼용해서 사용하였는지 판별하는 메소드
if(process.combineAlphabet(readData)) {
System.out.print("\n>>Input Error : You use English mixed with Hangul.\n>>Please Check Input Data Again.\n");
System.out.print(">>System Message : Value : " + readData);
retry = true;
} else {
// 현재 입력 받은 값이 최종적으로 맞는지 판단 후 재입력 여부를 물어보는 메소드
if(process.ConfirmInputData()) {
retry = true;
} else {
System.out.print("\n>>System Message : User decided InputData.");
System.out.print("\n>>System Message : Value : " + readData);
}
}
} else {
if(process.ConfirmInputData()) {
retry = true;
} else {
System.out.print("\n>>System Message : User decided InputData.");
System.out.print("\n>>System Message : Value : " + readData);
}
}
}
return retry;
}
}