본문으로 바로가기

자바 String 클래스 - 공백제거

category 코딩/Java 2016. 10. 18. 20:27







문자열을 처리하다 보면 공백을 제거해야 하는 경우가 있다. 이럴 때 사용할 수 있는 2가지 메서드를 알아보자.




trim( ) : 문자열 양 끝의 공백 제거



String 클래스에는 trim( ) 이라는 메서드가 있다. 이 메서드는 문자열의 앞뒤에 있는 공백을 모두 제거하는 기능을 한다. 앞뒤의 공백만 제거할 뿐 문자열 중간에 있는 공백은 제거되지 않는다.



API는 위와 같다.



예제로 trim( )의 기능을 확인해 보자.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class StringTest
{
    public static void main(String args[])
    {
        String p1 = "   I have a pen    ";
        String p2 = p1.trim();
        
        System.out.println("=="+p1+"==");
        System.out.println("=="+p2+"==");
    }
}
 
 
 
[실행결과]
 
==   I have a pen    ==
==I have a pen==
 
cs



p1에 담긴 문자열은 앞, 뒤로 공백이 들어가 있다. 이것에 trim( ) 메서드를 사용할 경우 앞, 뒤 공백이 모두 제거된 것을 확인할 수 있다. 단, 문자열에 포함된 공백은 그대로 남아있다.




replaceAll( ) : 기존 문자를 지정한 문자로 대체



replaceAll( ) 라는 메서드가 있다. 이 메서드는 문자를 대체하는 기능을 하는데, 이를 이용하여 공백을 제거할 수 있다. 



API는 위와 같다.




1
2
3
4
5
6
7
8
9
10
11
public class StringTest
{
    public static void main(String args[])
    {
        String p1 = "   I have a pen    ";
        String p2 = p1.replaceAll(" """);
        
        System.out.println("=="+p1+"==");
        System.out.println("=="+p2+"==");
    }
}
cs


1
2
3
4
[실행결과]
 
==   I have a pen    ==
==Ihaveapen==
cs



" "를 "" 로 대체하도록 하면 문자열 안에 있는 모든 공백이 제거되는 것을 확인할 수 있다. 그런데 이런 식으로 하였을 경우 공백이 제거되지 않는 경우도 있다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class StringTest
{
    public static void main(String args[])
    {
        String p1 = "   I have a pen    \tApple";
        String p2 = p1.replaceAll(" """);
        
        System.out.println("=="+p1+"==");
        System.out.println("=="+p2+"==");
    }
}
 
 
[실행결과]
 
==   I have a pen        Apple==
==Ihaveapen    Apple==
cs



문자열에 탭(\t) 을 포함시켜 보자. 이럴 경우 " "를 "" 로 대체한다고 해서 공백이 제거되지 않는다. 이렇게 \t 같은 이스케이프 시퀀스가 포함되었을 경우 공백을 정규식으로 표현해 주어야지 제거가 가능하다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class StringTest
{
    public static void main(String args[])
    {
        String p1 = "   I have a pen    \tApple";
        String p2 = p1.replaceAll("\\s""");
        
        System.out.println("=="+p1+"==");
        System.out.println("=="+p2+"==");
    }
}
 
 
 
[실행결과]
 
==   I have a pen        Apple==
==IhaveapenApple==
 
cs



공백을 정규식으로 \\s 로 표현할 경우 이스케이스 시퀀스에 의한 공백도 깔끔하게 제거된다.



RSS구독 링크추가 트위터 이메일 구독