Java

[Java] String Class에서 특정한 문자열을 기준으로 분리하기

나루나른 2024. 3. 20. 17:57

문자열에서 특정한 문자열을 기준으로 해당 부분만 받아오는 것에는 다양한 방법이 있는데

대표적인 것으로는 subString(), split() 등이 있다.

 

.substring()  :

.substring()  메소드는 Java에서 String 객체의 일부를 추출할 때 사용되는데 이 메소드를 통해 원본 문자열의 지정된 부분을 새 문자열로 반환할 수 있다.

 

사용 예)

String example = "Hello, World!";
String part1 = example.substring(7); // "World!"를 반환
System.out.println(part1);

String part2 = example.substring(0, 5); // "Hello"를 반환
System.out.println(part2);

 

split() :

 Java의 String 클래스에 정의되어 있으며, 문자열을 지정된 구분자(delimiter)를 기준으로 여러 부분으로 나누는 데 사용된다.

 

사용 예)

String text = "one,two,three";
String[] parts = text.split(",");
for (String part : parts) {
    System.out.println(part); //","을 기준으로 분리
}
  // 최종 출력값은 one, two, three가 출력됨

 

예제를 통해서 더 자세하게 알아보자

 

예제1) 이메일 주소에 '@' 문자가 있으면 해당 문자를 기준으로 문자열을 분리해서 출력하고 해당 문자가 없다면 '이메일 주소가 틀립니다' 라는 메세지를 출력하라

 

String email = new String("webmaster@naver.com");

/* .contains() 메소드는 java에서 'String' 클래스에 정의된 메소드로 한 문자열이 다른 문자열을
	포함하고 있는지 여부를 확인할 때 사용됨. 여기서는 email이라는 문자열 안에 '@'의 여부를 확인하는데
	만약에 email 안에 '@'가 존재하는 경우 true를 반환하고 그렇지 않으면 false를 반환한다. 
*/
// '@' 문자를 포함하고 있는지 확인
if (email.contains("@")) {
 	// '@'를 기준으로 문자열 분리
 	String[] parts = email.split("@"); // webmaster '@' naver.com

    // 분리된 각 부분 출력
    for (String part : parts) {
      System.out.println(part);
        }
} 
else {// '@' 문자가 없는 경우
       System.out.println("이메일 주소가 틀립니다.");
}
/* 전체적인 동작과정 
  email 문자열에 '@'가 포함되어 있는지를 contains 메소드로 확인한다. 
  '@'가 포함되어 있다면, split 메소드로 이메일 주소를 '@' 기준으로 두 부분으로 분리하고 
  이를 반복문을 통해 출력함. 만약 '@'가 포함되어 있지 않다면, else를 이용해 "이메일 주소가 틀림"을 출력한다.
*/

// 최종 출력값은 webmaster / naver.com

 

 

예제2) 이미지 파일만 첨부가 됬는지 확인한다. (.png / .jpg/ .gif 등 특정 확장명에 대한 유효성 검사가 필요) 

해당하는 확장명이 아닌 다른 확장명이 있는 경우 파일 선택이 잘못됬다는 오류메세지를 출력한다.

String path = new String("d:/frontend/images/sky2024.03.20.png");
		
// 파일 확장자 추출
 int dotIndex = path.lastIndexOf('.');//마지막 '.'의 위치를 저장 => [32]
 if (dotIndex != -1) { // 확장자가 있는 경우
        	
 /*
 [32] = lastIndexof('.')에 해당하는 값으로 +1을 해줌으로써 그 뒤에 있는 인덱스가 가진
 문자열을 추출하고 그것을 소문자로 변환함([33]=p, [34]=n, [35] = g 추출후 소문자 변환)
 */
 String extension = path.substring(dotIndex + 1).toLowerCase(); // 확장자 추출 및 소문자 변환

// 파일명 추출
/*
마지막 슬래쉬 '/'의 인덱스가 [18]인데 마지막 '/'이후의 파일명을 추출해야되므로 +1을 더해서
 [19]번째 인덱스가 가진 문자열's'부터 마지막 '.'(dotIndex) 까지의 문자열 '0'을 추출한다.
*/
String filename = path.substring(path.lastIndexOf('/') + 1, dotIndex);
//결과적으로 sky2024.03.20이 파일명이 된다.

// 확장자 유효성 검사 extension의 값이 png, jpg, gif의 경우 파일명과 확장명을 출력하고
 if (extension.equals("png") || extension.equals("jpg") || extension.equals("gif")) {
  System.out.println("파일명 : " + filename + "/" + "확장명 : "+ extension);
               
 } else {//틀렸다면 파일 선택이 잘못됐다는 메세지 출력
   System.out.println("파일 선택이 잘못됐습니다. png, jpg, gif 파일만 가능합니다.");
}

//if의 값이 true라면 콘솔창에서 출력값은 파일명 : sky2024.03.20 / 확장명 : png가 출력된다.