fladi 2021. 8. 9. 15:10
728x90

 

보기싫은 책 목록이다.

앞에 10213 이런 숫자들이랑 뒤에 붙은 1이나 2는 쓸모없는 숫자처럼 보인다. 탭 키도 엉망이라 보기 좋지 않다.

하나하나 수정하기는 귀찮으니 프로그램으로 만들어줄 생각이다.

 

 

 

 

먼저 결과 화면부터 보자. 출판사랑 책이름이 붙어있기는 하지만 아까보다는 보기 좋은 문서같다.

 

 

	public static void main(String[] args) {
		Vector<String> all = new Vector<>();
		
		inputDocument(all);

		scan_and_print(all);
	}

 

main함수는 간단하게 만들어줬다. all백터에 문서 전체를 받고 scan_and_print함수로 정리된 문서를 출력할거다.

 

 

	static boolean isNo(String str) { // 앞에 10215 이거인지 알려주는 함수
		if (str.contains("10")) {
			try {
				int a = Integer.parseInt(str);
				if (a / 1000 == 10)
					return true;
			} catch (NumberFormatException e) {

			}
		}
		return false;
	}

 

문서를 살펴보면 10104같은 번호, 책이름, 출판사, 이상한 숫자 이렇게 구성되어있다.

isNo함수는 현재 읽은 문자열이 10104같은 번호인지 확인해주는 함수이다. 

맞다면 true를 반환한다.

 

(참고) 저렇게 1000으로 나눠주고 트라이캐치 해준 이유는 책 이름에 100이 들어갈 수도 있기 때문임

 

 

	static void scan_and_print(Vector<String> all) {
		Iterator<String> it = all.iterator();
		Iterator<String> preIt = all.iterator();
		it.next();
		int i = 1;

		while (it.hasNext()) {
			String n = it.next();
			String pre = preIt.next();

			if (isNo(n)) {
				System.out.println();
				continue;
			}

			if (isNo(pre)) {
				System.out.print(i + ". ");
				i++;
				continue;
			}

			System.out.print(pre + " ");	
		}
	}

 

preIt와 it 이터레이터로 2번 읽어줬다. 문서 마지막에 1 2같은 이상한 숫자를 빼기 위해서였다. 

10104숫자라는 걸 알아내기만 한다면 그 앞은 1 2라는 걸 알 수 있으니 ㅇㅇㅇ 그렇게 해줬다.

it가 10104라면 앤터를 치고 pre가 10104라면 몇 번째 도서인지 출력해준다. 둘 다 아닐 경우 그냥 출력한 후 띄어쓰기도 해준다.

 

 

goood

 

728x90