package verification;
import exception.CustomSeparatorEmptyException;
import exception.CustomSeparatorNoNewLineException;
import exception.CustomSeparatorNumberException;
import exception.InputStringBlacnkException;
import separator.SeparatorEnum;
import separator.SumSeparatorList;
public class VerificationInput {
private String input;
public String getCustomSeparator() {
return customSeparator;
}
private String customSeparator =" ";
private VerificationInput(String input){
this.input=input;
}
public void verificationString() throws CustomSeparatorEmptyException, CustomSeparatorNumberException, CustomSeparatorNoNewLineException, InputStringBlacnkException {
if (verficationStringBlacnk()) {
throw new InputStringBlacnkException("공백 문자는 포함될 수 없습니다.");
}
}
public static VerificationInput verificationInputFrom(String input) throws CustomSeparatorNoNewLineException, CustomSeparatorNumberException, CustomSeparatorEmptyException, InputStringBlacnkException {
VerificationInput verificationInput = new VerificationInput(input);
verificationInput.verificationString();
verificationInput.findCustomSeparator();
return verificationInput;
}
private boolean verficationStringBlacnk() {
if (input.contains(" ")) {
return true;
} else {
return false;
}
}
public void findCustomSeparator() throws CustomSeparatorNoNewLineException, CustomSeparatorNumberException, CustomSeparatorEmptyException {
if (input.startsWith(SeparatorEnum.CUSTOM_SEPARATOR_FIRST.getSeparator())) {
int customSeparatorFirestLength = SeparatorEnum.CUSTOM_SEPARATOR_FIRST.getSeparator().length();
int newLineIndex = input.indexOf(SeparatorEnum.CUSTOM_SEPARATOR_NEWLINE.getSeparator());
if (newLineIndex == -1) {
throw new CustomSeparatorNoNewLineException("Custom Separator는 개행문자인 \\n이 필요합니다.");
}
String result = input.substring(customSeparatorFirestLength, newLineIndex);
verificationCustomSeparator(result);
customSeparator = result;
}
}
private void verificationCustomSeparator(String customSeparatorString) throws CustomSeparatorNumberException, CustomSeparatorEmptyException, CustomSeparatorNoNewLineException {
if (customSeparatorString.isEmpty()) {
throw new CustomSeparatorEmptyException("Custom Separator는 null일 수 없습니다.");
} else if (isInteger(customSeparatorString)) {
throw new CustomSeparatorNumberException("Cutome Separator는 숫자로 지정할 수 없습니다.");
}
}
private boolean isInteger(String customSeparatorString) {
try {
Integer.parseInt(customSeparatorString);
return true;
} catch (NumberFormatException e) {
return false;
}
}
}
package sum;
import java.util.List;
public class SeparatorSumCalculate {
private String[] result;
private List<String> sumSeparatorList;
private String input;
public void separatorReplaceBlank() {
for (String separator : sumSeparatorList) {
input = input.replace(separator, " ");
}
result = input.split(" ");
}
public SeparatorSumCalculate(List<String> sumSeparatorList, String input) {
this.sumSeparatorList = sumSeparatorList;
this.input = input;
separatorReplaceBlank();
}
public static SeparatorSumCalculate sumSeparatorListInputOf(List<String> sumSeparatorList, String input) {
return new SeparatorSumCalculate(sumSeparatorList, input);
}
public int sumCalculate() {
int sum = 0;
for (String resultInteger : result) {
if (!resultInteger.isEmpty()) {
sum += Integer.parseInt(resultInteger);
}
}
return sum;
}
}
package separator;
import exception.CustomSeparatorEmptyException;
import exception.CustomSeparatorNoNewLineException;
import exception.CustomSeparatorNumberException;
import sum.SeparatorSumCalculate;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class SumSeparatorList {
private List<String> separatorList;
public SumSeparatorList(String customSeparator) {
this.separatorList = Stream.of(SeparatorEnum.values())
.map(SeparatorEnum::getSeparator)
.collect(Collectors.toList());
this.separatorList.add(customSeparator);
}
public List<String> getSeparatorList() {
return separatorList;
}
public static SumSeparatorList separatorListInputFrom(String customSeparator) {
return new SumSeparatorList(customSeparator);
}
}
package separator;
public enum SeparatorEnum {
CUSTOM_SEPARATOR_FIRST("//"),
CUSTOM_SEPARATOR_NEWLINE("\\n"),
COLON_SEPARATOR(":"),
REST_SEPARATOR(",");
private final String separator;
SeparatorEnum(String s) {
this.separator = s;
}
public String getSeparator() {
return separator;
}
}
package inputOutput;
import verification.VerificationInput;
import java.util.Scanner;
public class InputString {
public String getString() {
return scanner.nextLine();
}
private final Scanner scanner;
public InputString() {
this.scanner = new Scanner(System.in);
}
}
import exception.CustomSeparatorEmptyException;
import exception.CustomSeparatorNoNewLineException;
import exception.CustomSeparatorNumberException;
import exception.InputStringBlacnkException;
import inputOutput.InputString;
import separator.SumSeparatorList;
import sum.SeparatorSumCalculate;
import verification.VerificationInput;
//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
public class Main {
public static void main(String[] args) throws CustomSeparatorNumberException, CustomSeparatorNoNewLineException, CustomSeparatorEmptyException, InputStringBlacnkException {
InputString inputString = new InputString();
while (true) {
String input = inputString.getString();
VerificationInput verificationInput = VerificationInput.verificationInputFrom(input);
String customSeparator = verificationInput.getCustomSeparator();
SumSeparatorList sumSeparatorList = SumSeparatorList.separatorListInputFrom(customSeparator);
SeparatorSumCalculate separatorSumCalculate = SeparatorSumCalculate.sumSeparatorListInputOf(sumSeparatorList.getSeparatorList(), input);
System.out.println(separatorSumCalculate.sumCalculate());
}
}
}
기존 코드와 유사하게, 모든 인스턴스들이 메인에서 생성되어 실행되고 있다는 피드백을 받았다..
코드 수정할 것들이랑 참고할 레퍼런스도 코드 리뷰에 달아주셔서 그것을 토대로 리팩토링 할 예정이다.
addStringPOJO(4) - 정적 메서드로 변경 (0) | 2025.01.09 |
---|---|
addStringPOJO(3) - 예외 처리 방식 변경 (0) | 2025.01.05 |
AddStringPOJO(2) - Refactor (1) | 2025.01.03 |
Java - POJO 형식으로 객체지향 공부하기 (0) | 2025.01.02 |
Board (2) | 2024.11.20 |