본문으로 바로가기

자바 String 클래스 - 문자열 자르기

category 코딩/Java 2016. 10. 17. 20:43






자바에서 String 클래스는 많이 사용된다.  String a = "abc" 이런 식으로 단순히 문자값을 담는 변수의 역할을 하기도 하고, 문자열을 가공하거나 문자열에 대한 각종 정보를 얻기 위해 사용하기도 한다.


String 클래스의 여러 메서드 중 이 포스팅에서는 문자열을 자르는 메서드를 소개하려 한다.




  • 패키지 : java.lang

  • 클래스 : String - 문자의 처리에 관한 메서드가 있다.


문자열을 자르는 메서드는 다음과 같다.




substring( ) 메서드는 2가지 종류가 있다. (메서드 오버로딩) 


  • substring(int 시작인덱스) 

   : 매개변수로 시작 인덱스를 지정해 준다. 그러면 시작 인덱스 다음 문자부터 문자열 끝까지를 잘라서 반환한다.

  • substring(int 시작인덱스, int 끝인덱스) 

   : 시작과 끝 인덱스를 지정한다. 그러면 지정한 곳의 문자열을 잘라서 반환한다.



주의할 점은 substring( ) 메서드는 시작 인덱스 다음 문자열부터 자른다는 것이다. 즉 시작 인덱스에 해당하는 문자는 포함되지 않는다. 시작 인덱스와 반대로 끝 인덱스의 경우 포함된다. 예를 들어 substring(2,7) 라고 하면 3번째 문자 ~ 7번째 문자까지 잘라서 반환한다.



그러면 두가지 메서드를 예제를 통해 확인해 보자.



1
2
3
4
5
6
7
8
9
10
public class StringTest
{
    public static void main(String args[])
    {
        String p = "I-have-a-pen";
        
        System.out.println("substring(int begin) : " + p.substring(5));
        System.out.println("substring(int begin, int end) : " + p.substring(510));
    }
}
cs



먼저 I-have-a-pen 이라는 문자열을 지정한다. 그리고 두 종류의 substring( ) 메서드를 이용해서 문자열을 자른다.



1
2
3
4
[실행결과]
 
substring(int begin) : e-a-pen
substring(int begin, int end) : e-a-p
cs



실행 결과는 위와 같다. substring(5) 로 지정하였을 경우 6번째 문자부터 문자열 끝까지 잘려서 반환되었다. substring(5, 10) 으로 지정하였을 경우 6번째 문자부터 10번째 문자까지 잘려서 반환되었다.


그런데 substring( ) 의 시작 인덱스는 몇부터 가능한 것일까? 3가지 경우로 테스트를 해보자. 



1
2
3
4
5
6
7
8
9
10
11
public class StringTest
{
    public static void main(String args[])
    {
        String p = "I-have-a-pen";
        
        System.out.println("substring(int begin) : " + p.substring(0));
        System.out.println("substring(int begin) : " + p.substring(1));
        System.out.println("substring(int begin) : " + p.substring(-1));
    }
}
cs



시작 인덱스를 0, 1, -1로 지정하고 실행해 보았다.



1
2
3
4
5
6
7
8
[실행결과]
 
substring(int begin) : I-have-a-pen
substring(int begin) : -have-a-pen
 
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(String.java:1927)
    at StringTest.main(StringTest.java:10)
cs



0으로 지정하였을 경우 1번째 문자를 포함해서 자른다. 1로 지정하면 2번째 문자부터 자른다. -1로 지정하면 인덱스가 범위를 벗어났다는 오류가 발생한다. 즉 시작 인덱스는 0 이상이면 된다.


끝 인덱스의 경우 문자열 길이보다 긴 숫자를 지정하면 오류가 발생한다. 위의 I-have-a-pen의 길이는 총 12이다. 끝 인덱스로 13 이상을 지정하면 오류가 발생한다.




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