자바 개행문자 입력 - jaba gaehaengmunja iblyeog

자바에서 줄바꿈은 \n\r로 표시가 되는데요.

이걸  찾아서 공백으로 바꾸고 싶어서 이렇게 해 봤는데 잘 안되더라구요.

1

value = value.replaceAll("\n"" ");

cs


그래서, 인터넷을 뒤져서 다음과 같이 해보니 잘 되더군요.

System.getProperty("line.sepatator")가 줄바꿈 문자를 담고 있기 때문이죠.

1

value = value.replaceAll(System.getProperty("line.separator"), " ");

cs


아래처럼 정규식 패턴을 이용해도 됩니다.

\r\n 또는 \n\r 또는 \n 또는 \r을 찾아서 공백으로 치환하는 명령입니다.

1

value = value.replaceAll("(\r\n|\r|\n|\n\r)"" ");

cs



공유하기

게시글 관리

구독하기어느 프로그래머의 스마트한 이야기

  • 카카오스토리
  • 트위터
  • 페이스북

'프로그래밍 언어 > java + jsp + jstl' 카테고리의 다른 글

[jsp] 파일을 include 했을 때 한글 깨지는 문제 해결 방법  (0)2017.07.15[java/jsp] 자바(또는 jsp)에서 따옴표(") 치환하는 방법  (0)2017.03.21[java] poi로 엑셀 파일의 값을 읽을 때 날짜가 지수로 표시되는 문제 해결하기  (1)2016.12.22[java/jsp] js 파일 안에서 아무리 소스를 수정해도 브라우저에 바로바로 반영이 안된다면?  (4)2016.11.11[jstl] Date형과 String형인 경우 jstl(fmt)로 날짜 포맷에 맞게 출력하는 방법  (0)2016.11.11

자바에서 줄바꿈은 \n\r로 표시가 되는데요.

이걸 찾아서 공백으로 바꾸고 싶어서 이렇게 해 봤는데 잘 안되더라구요.

value = value.replaceAll("\n", " ");

그래서, 인터넷을 뒤져서 다음과 같이 해보니 잘 되더군요.

System.getProperty("line.sepatator")가 줄바꿈 문자를 담고 있기 때문이죠.

value = value.replaceAll(System.getProperty("line.separator"), " ");

아래처럼 정규식 패턴을 이용해도 됩니다.

\r\n 또는 \n\r 또는 \n 또는 \r을 찾아서 공백으로 치환하는 명령입니다.

value = value.replaceAll("(\r\n|\r|\n|\n\r)", " ");

1. next()는 하나의 단어만 입력 받는다.

그래서 첫 단어 앞쪽의 공백이나 개행문자는 무시하지만, 뒤의 개행문자는 버퍼에 남게 된다.

2.  nextLine()는 개행문자 까지를 한 줄로 인식하고, 개행문자는 버려진다.

next(), nextInt()등은 개행 문자가 남아 nextLine()를 만나면, 이상한 버그가 생긴다.

그래서 개행문자를 처리하는 작업이 필요하다.

자바 개행문자 입력 - jaba gaehaengmunja iblyeog

Scanner.nextInt메소드 이용시에 정수를 엔터를 사용해 입력하는 상황에서, 엔터(개행문자)바로 전까지만 숫자로 입력을 받는다. 즉 개행문자는 제거되지 않는다. 따라서, 개행문자는 뒤에 계속 남아있는 것이다.

 

개행문자가 남아있기 때문에 nextInt메소드를 사용한 바로뒤에서 nextLine 메소드로 한줄을 입력 받을 때, 그 엔터를 쳤던 것이 입력되기 때문에 원하는 데이터를 입력할 수 없다. 

아래 코드처럼 사용하면 문제가 일어난다는 것이다.

 

System.out.print("a 입력: ");

a = userInput.nextInt();

 

System.out.print("b 입력: ");

b = userInput.nextLine();

 

이런식으로 작성하면 b에 아무것도 찍히지 않게 된다는 말이다.

 

해결방법

a와 b 입력 사이에 nextLine()메소드를 하나 더 사용해서 개행(엔터)를 처리해준다. 가장 편한 방법이다.

즉, userInput.nextLine(); 한 줄을 추가한다.

 

 

 

 

 


 

System.in.read() 메소드 (System패키지)

Java 5의 이전 버전에서 사용되었던 System.in.read()메서드도 알아두자.

이 메서드는 입력된 값을 아스키 코드값으로 저장한다.

ㅇA라는 데이터를 입력한다면 아스키코드 표현인 65가 된다.

ㅇa라는 데이터를 입력한다면 아스키코드 표현인 97이 된다.

ㅇ숫자를 입력하더라도 아스키코드 문자에 해당하는 값으로 저장되기 때문에, 아스키코드의 십진수 정수값 -48을 빼줘야 한다. 예를 들면

System.out.print("\n숫자를 입력하세요: ");

int b = System.in.read() - '0'               //숫자 0의 아스키코드 십진수 값이 48이다. 즉, 48을 빼주는 거다.

이렇게 하면 숫자 5를 입력했을 때 5를 출력할 수 있다. 

ㅇ또한 키보드의 엔터키도 아스키코드 값이 있고, 입력값에 포함이 된다. 처리해주지 않는다면 원치 않는 결과가 나올 수 있다. 엔터키를 누를 때 아스키코드 13번 값이 입력되고, 또 개행이 될 때 10번 값이 입력이 된다.. (입력값 \r과 \n) 이 값을 없애주기 위해서, System.in.read();메소드를 두 번 작성해야 한다. 그래야 이 \r과 \n값을 먹어버릴 수 있다.

 

깔끔히 정리해서 코드로 확인해보자.

 

자바 개행문자 입력 - jaba gaehaengmunja iblyeog
자바 개행문자 입력 - jaba gaehaengmunja iblyeog

(참고: 3번, 6번 줄: throws IOException을 알고 싶다면 '자바 입출력 예외처리'를 공부하자)

 

 

 

++A라는 문자 하나 입력하는 방법은 알았는데, "문자열"을 입력하려면 어떻게 해야할까??

https://commin.tistory.com/41

 

[초급 JAVA]자바 기본 입 출력 - System 클래스 / System.in.read(); By Commin .September 12, 2016 Intro 드디어 자바 포스팅을 쓰게되네요. 많이준비해 놓은만큼 빠르게 쓰도록하겠습니다. 그리고 제가 포스팅할때 사용..

String에서 줄바꿈(newline)은 Window에서 \r\n, Linux에서 \n으로 표현됩니다.

하지만 이런 방식은, 서로 다른 종류의 OS에서 동작하는 프로그램에서 문제가 발생할 수 있습니다.

// Windows
System.out.println("Hello\r\nWorld");

// Linux
System.out.println("Hello\nWorld");

System.lineSeparator()

System.out.println("Hello" + System.lineSeparator() + "World");
0은 프로그램이 실행되는 OS의 개행 문자를 리턴합니다. 따라서, Windows 및 Linux에서 실행 시, 동일한 결과를 출력합니다.

System.out.println("Hello" + System.lineSeparator() + "World");

Output:

Hello
World

System.out.println("Hello" + System.lineSeparator() + "World");
0는 Java 1.7부터 제공됩니다.

public final class System {
    /**
     * Returns the system-dependent line separator string.  It always
     * returns the same value - the initial value of the {@linkplain
     * #getProperty(String) system property} {@code line.separator}.
     *
     * <p>On UNIX systems, it returns {@code "\n"}; on Microsoft
     * Windows systems it returns {@code "\r\n"}.
     *
     * @return the system-dependent line separator string
     * @since 1.7
     */
    public static String lineSeparator() {
        return lineSeparator;
    }
}

System.getProperty("line.separator")

System.out.println("Hello" + System.lineSeparator() + "World");
2 프로퍼티도 OS에 맞는 개행 문자를 리턴합니다. 이것을 사용할 수도 있습니다.

String newline = System.getProperty("line.separator");
System.out.println("Hello" + newline + "World");

Output:

Hello
World

String#format()의 %n

System.out.println("Hello" + System.lineSeparator() + "World");
3에서
System.out.println("Hello" + System.lineSeparator() + "World");
4은 line separator를 의미합니다.

System.out.print(String.format("%s%n%s", "Hello", "World"));

Output:

Hello
World

References

  • StackOverflow

Loading script...

Related Posts

  • Java - 1초마다 반복 실행
  • Java - 문자열 단어 개수 가져오기
  • Java - 문자열 첫번째 문자, 마지막 문자 확인
  • Java - 여러 Set(HashSet) 합치기
  • Java - 배열을 Set(HashSet)로 변환
  • Java - Set(HashSet)를 배열로 변환
  • Java - 문자열 한글자씩 자르기
  • Java - 명령행 인자 입력 받기
  • Java - 리스트 역순으로 순회, 3가지 방법
  • Java - 특정 조건으로 리스트 필터링, 3가지 방법
  • Java - HashMap 모든 요소들의 합계, 평균 계산
  • Java - 특정 조건으로 HashMap 필터링
  • Java - 싱글톤(Singleton) 패턴 구현
  • Java - 숫자 왼쪽에 0으로 채우기
  • Java - String 배열 초기화 방법
  • Java - 정렬된 순서로 Map(HashMap) 순회
  • Java - HashMap에서 key 또는 value 값들만 가져오기
  • Java - HashMap을 문자열로 변환
  • Java - HashMap에서 특정 key, value 삭제
  • Java - 반복문 안에서 HashMap 요소 삭제
  • Java - Set에 특정 요소가 있는지 확인