일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- JavaScript
- JSTL
- JSX
- forEach
- 자바
- JS
- 형변환
- spring
- 개발
- Java
- html
- 리액트
- React
- set
- SQL
- 맛집
- url 변환
- 스프링
- 모바일게임
- 이름 마스킹
- Oracle
- 배열
- 원펀맨: 최강의 남자
- array
- 자바스크립트
- table
- 원펀맨
- url 치환
- jQuery
- 오라클
- Today
- Total
특별한 일상
[Java] 개행 문자열 치환 방법들 (String replace) 본문
안녕하세요. 소다맛사탕 입니다.
오늘은 개행 문자열을 치환하는 방법들에 대해 알아 보겠습니다.
※ 개행 문자 : new line character의 약어. 인자 또는 표시의 위치를 다음 행의 최초의 위치로 이동시키는 서식 제어 문자. 즉, 인자 위치나 표시 위치를 다음의 인자 행이나 표시 행의 최초의 장소로 이동시키기 위한 서식 제어 문자.
위와 같이 용어에 대한 설명은 알겠는데..., 개행 문자(?). 정확하게 뜻을 알아가며 쓰는 사람은 없을 겁니다.
개행 문자열을 치환해서 쓴다는 것은 바로 이런 경우 인데요.
프로젝트를 진행하다 보면 DB TABLE에 적재되어 있는 긴 문자열이 있습니다.
그 긴 문자열을 화면으로 노출시키게 되면 아래와 같은 오류가 발생하는데요.
Uncaught SyntaxError: Invalid or unexpected token
var str = '<div class="testClass">
<p>테스트 입니다.</p>
<button onclick="fncClickOpt();">클릭</button>
</div>';
위와 같이 긴 문자열 데이터가 띄어쓰기 된 채로 표시됩니다. 그래서 스크립트가 제대로 작동하지 않는 경우가 발생합니다.
그래서 위와 같은 경우를 없애기 위해 서버단에서 문자열을 치환해야 합니다.
개행 문자 치환
String str = "";
str = " 안녕하세요.\r\n" +
" 저는 소다맛사탕 입니다.\r\n" +
" 반갑습니다.\r\n" +
" 이건 테스트 입니다.\r\n" +
" abcdefg\r\n" +
" 1234567";
System.out.println("=======================01");
System.out.println(str);
str = str.replace("\r\n", "");
System.out.println("=======================02");
System.out.println(str);
str = " 안녕하세요.\r\n" +
" 저는 소다맛사탕 입니다.\r\n" +
" 반갑습니다.\r\n" +
" 이건 테스트 입니다.\r\n" +
" abcdefg\r\n" +
" 1234567";
str = str.replace(System.getProperty("line.separator"), "");
System.out.println("=======================03");
System.out.println(str);
str = " 안녕하세요.\r\n" +
" 저는 소다맛사탕 입니다.\r\n" +
" 반갑습니다.\r\n" +
" 이건 테스트 입니다.\r\n" +
" abcdefg\r\n" +
" 1234567";
str = StringUtils.normalizeSpace(str);
System.out.println("=======================04");
System.out.println(str);
1. 일반적인 치환
replace("\r\n", "")
String java.lang.String.replace(CharSequence arg0, CharSequence arg1)
데이터베이스를 통해 들어오는 개행 문자는 \r\n 형식으로 들어오므로
방법 : String.replace("\r\n", "");
2. Java System 제공
getProperty("line.separator")
String java.lang.System.getProperty(String key)
자바를 실행할 때 특정 시스템 프로퍼티를 가져올 수 있는데 그 중에 행 구분 문자인
방법 : String.replace(System.getProperty("line.separator"), "");
3. Apache 제공 개행 문자열 치환
StringUtils.normalizeSpace
String org.apache.commons.lang3.StringUtils.normalizeSpace(String str)
MAVEN Repository : https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
WAS가 연결되어 있는 웹프로젝트 가정하에 쓸 수 있는 방법입니다.
강제적으로 개행 문자를 치환하므로 아주 강력하고 확실합니다.
방법 : StringUtils.normalizeSpace(String);
결론적으로,
1번의 방법은 대표적인 방법이지만 간혹 개행 문자가 치환되지 않는 특수한 경우가 발생합니다.
2번의 방법은 OS 구분 관계 없이 모든 환경에서 개행 문자열을 치환할 수 있는 방법입지만 마찬가지로 개행 문자가 치환되지 않는 특수한 경우가 발생합니다..
3번의 방법은 줄 바꿈을 포함한 모든 공백을 단일 공백으로 정규화 하는 가장 강력하고 확실한 방법이지만, WAS가 연결되어 있는 환경과 더불어 프로젝트에 dependency를 선언해야 쓸 수 있습니다.
참조 : https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html
https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html
'IT•개발 끄적 > Java' 카테고리의 다른 글
[JAVA] 정규식을 이용한 마스킹(정규표현식 마스킹 처리) (0) | 2021.06.30 |
---|---|
[JAVA] static, final, static final(상수) 사용법 및 예시 (0) | 2021.06.15 |
[JAVA] HTML, MVC, Servlet 환경에서 특수문자 치환( < > & ...) (0) | 2021.06.09 |
[Java] 컬렉션 프레임워크 List: ArrayList, LinkedList 차이 (0) | 2021.05.15 |
[Java] 문자열(String) 대소문자 변환 및 비교(toUpperCase, toLowerCase) (0) | 2021.05.04 |