김갱환
맨땅에 코딩
김갱환
전체 방문자
오늘
어제
  • 분류 전체보기 (239)
    • ⁂ 맨땅에 코딩 (11)
      • : Story (3)
      • : MiniProject 'MyWeb' (1)
      • : Final Project (5)
      • : Josa-Moa 한국어 조사 처리 프로젝트 (1)
    • —————Frontend——————————————.. (0)
    • ⁂ HTML (10)
      • : 기본 익히기 (10)
    • ⁂ CSS (15)
      • : 기본 익히기 (15)
    • ⁂ Java Script (32)
      • : 기본 익히기 (28)
      • : 자바스크립트 라이브러리 (1)
      • : 연습 문제 (3)
    • ⁂ jQuery (11)
      • : 기본 익히기 (11)
    • ⁂ Bootstrap (3)
      • : 기본 익히기 (3)
    • ⁂ TailWind CSS (1)
    • ⁂ AJAX (5)
      • : 기본 익히기 (5)
    • ⁂ Vue.js (3)
      • : 기본 익히기 (3)
    • —————DB : Data Base————————.. (0)
    • ⁂ Oracle DB (27)
      • : 기본 익히기 (24)
      • : 연습 문제 (3)
    • ⁂ MyBatis Framework (15)
      • : 기본 익히기 (15)
    • —————Backend———————————————.. (0)
    • ⁂ Java (62)
      • : 기본 익히기 (42)
      • : JDBC - Java DataBase Conn.. (4)
      • : Crawling (2)
      • : 독학으로 공부하기(과거) (11)
      • : 연습문제 (3)
    • ——————Web————————————————— (0)
    • ⁂ JSP (28)
      • : 기본 익히기 (28)
    • ⁂ Spring FrameWork (15)
      • : Legacy Project (1)
      • : 기본 익히기(Boot 기반) (14)
    • ——————————————————————— (0)
    • ⁂ Error Note (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • web.xml수정
  • 코딩공부 #자바공부
  • 자바
  • 코딩
  • 자바공부
  • 객체지향프로그래밍
  • 코딩 #코딩공부 #상수 #리터럴 #형변환 #개발자 #자바 #자바공부 #자바독학
  • 풀스택
  • 비트연산자 #코딩공부 #자바공부 #코딩 #자바 #프로그래밍 #개발자
  • 백앤드
  • 개발자
  • 프론트앤드
  • 연산자 #기본연산자 #코딩 #자바 #독학 #자바공부 #자바연산자
  • 코딩공부 #코딩 #자바 #자바독학 #자바공부 #개발자 #프론트앤드 #백앤드 #풀스택
  • 코딩 #코딩공부 #프론트앤드 #백앤드 #풀스택개발자
  • httperror
  • ErrorPage
  • 코딩공부
  • HTML공부
  • http에러메세지

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
김갱환
⁂ Java/: 기본 익히기

[JAVA] #5-4 String 메서드

⁂ Java/: 기본 익히기

[JAVA] #5-4 String 메서드

2022. 9. 8. 17:49

1. String 메서드?

 

 자바스크립트에서도 자주 사용했던 String.

 이것은 문자열 관련 클래스를 통칭하는 단어이다.

 이 String 안에서 사용할 수 있는 여러 메서드를 알아보자.

 

1) equals()

 만약 클래스에서 문자열과 문자열을 서로 비교하고 싶을 때 어떻게 해야할까?

 아래의 코드를 확인해보자.

String str="HAPPY";
String name = new String("HAPPY");

if(str==name) {
    System.out.println("같다");
} else {
    System.out.println("다르다");
} // if end

 

 결과가 어떻게 나올까?

 다르다로 나온다.

 왜냐하면 == 는 데이터들의 주소값을 찾기 때문이다.

 

 그래서 이때는 equals() 메서드를 사용해야한다.

// 문자열의 내용을 비교하는 경우 == 연산자 사용하지 말고 equals() 함수를 이용할 것
if(str.equals(name)) {
    System.out.println("같다");
} else {
    System.out.println("다르다");
} // if end

 이 경우에는 데이터의 문자열 값 자체를 두고 비교를 하기에 같다 라는 값이 출력되게 된다.

 

 

2) isEmpty()

 이 함수는 문자열의 갯수가 0인지를 확인해주는 함수이다.

if(str.isEmpty()) {
    System.out.println("빈문자열이다");
} else {
    System.out.println("빈문자열이 아니다");
} // if end

 

3) split()

 이 함수는 특정 문자를 기준으로 문자열을 분리하는 함수이다.

 이 때 배열로 분리되므로 참조 변수는 String[ ] 의 형태로 선언이 된다.

str=new String("Gone With The Wind");
String[] word= str.split(" ");
for(int i=0; i<word.length; i++) {
    System.out.println(word[i]);
} // for end

 여기서 split() 안에 " "를 주어 공백문자를 기준으로 분리하였다.

 

4) StringTokenizer()

StringTokenizer st= new StringTokenizer(str, " ");

 여기서 StringTokenizer() 안에 " "를 주어 공백문자를 기준으로 분리하였다.

 StringTokenizer 안에는 세가지 값이 들어올 수 있다.

 

 ① StringTokenizer(문자열); : 띄어쓰기 기준으로 문자열을 분리한다

 ② StringTokenizer(문자열, 구분자); : 구분자를 기준으로 문자열을 분리

 ③ StringTokenizer(문자열, 구분자, true/false); : 구분자를 기준으로 넣을 때 구분자도 하나의 토큰으로 사용할지(true) 아닐지(false) / 기본값은 false이다.

 

 이 메서드를 사용해서도 문자열을 분리해서 출력시킬 수 있다.

 StringTokenizse 에서 사용하는 메서드를 알아보자.

 

메서드명 리턴값 역할
hasMoreTokens() boolean 남아있는 토큰이 있으면 true를 리턴, 더 이상 남은 토큰이 없으면 false
nextToken() String 객체에서 다음 토큰을 반환
nextToken(String delim) String delim(구분자)을 기준으로 다음 토큰을 반환
hasMoreElements() boolean hasMoreTokens와 동일한데 엘레먼트보다 토큰으로 된 메서드를 주로 사용
nextElement() Object nextToken 메서드와 동일하지만 문자열이 아닌 객체로 리턴한다
countTokens() int 남아있는 토큰의 개수를 리턴한다

 

 우선 가장 간단한 방법인 nextToken을 사용해보려한다.

StringTokenizer st= new StringTokenizer(str, " ");
System.out.println(st.countTokens());	// 토큰 수 세기
System.out.println(st.nextToken());		// 토큰 하나씩 출력
System.out.println(st.nextToken());
System.out.println(st.nextToken());
System.out.println(st.nextToken());

 

 다음은 hasMoreTokens의 true 값을 반환하는 성질을 사용하여 한번에 출력시키는 방법이다.

// hasMoreTokens 사용하기
System.out.println(st.hasMoreTokens());			
while(st.hasMoreTokens()) {
    System.out.println(st.nextToken());
} // while end

 그런데 위의 코드를 모두 입력한 뒤 F11을 입력하면 hasMoreTokens()의 결과물은 아무것도 반환되지 않는다.

 왜냐면 위에서 토큰을 모두 사용했기 때문이다.

 이처럼 토큰을 얼마나 사용했는지도 잘 확인하며 출력시켜야한다.

 

 

2. 문자열의 연산속도

 

 자바에서는 String 객체를 불변의 객체라고 부른다.

 한번 선언이 되면 바꾸지 못하기 때문이다.

 그래서 자바에서는 String객체를 연산하여 다른 요소를 추가시킨다.

 즉, 문자열도 연산이 된다.

 

 아래의 코드를 살펴봐보자.

String s1="";
System.out.println(s1.length());

s1=s1+"one";
System.out.println(s1.length()+s1);		

s1=s1+"two";
System.out.println(s1.length()+s1);

s1=s1+"three";
System.out.println(s1.length()+s1);

// 모든 문자열 지우기
s1="";
System.out.println(s1.length()+s1);

출력결과

 

 그런데 이 문자열의 연산이 100만개를 넘는다면?

 자바에서 문자열을 연산할 때 점점 속도가 느려지고 부하가 걸리게 된다.

 그래서 문자열을 보다 빠르게 연산하는 것들이 개발되고 있다.

 

 자바에서 문자열을 연산할 때 사용하는 세가지 방법이 있다.

 String < StringBuffer < StringBuilder

 오른쪽으로 갈 수록 연산의 속도가 더 빠르다(사실 1,2번째 요소들은 속도차이가 크지 않다).

 

 이 중 가장 연산이 빠른 StringBuilder를 사용하는 방법을 알아보자.

StringBuilder s2 = new StringBuilder();

s2.append("SEOUL");
System.out.println(s2.length()+s2.toString());

 

1) StringBuilder : append (문자열 추가하기)

 먼저 StringBuilder의 객체를 new로 생성해준 뒤 .append()를 통하여 문자열을 추가해준다.

 출력시에는 toString()을 사용하여 출력시킨다.

 이 .append는 반복사용도 가능하다.

s2.append("JEJU");
System.out.println(s2.length()+s2.toString());

s2.append("BUSAN").append("DAEJUN");
System.out.println(s2.length()+s2.toString());

 

 

2) StringBuilder : delete (모든 문자열 지우기)

s2.delete(0, s2.length()); // 몇 번째 문자열까지 지울 것인지
System.out.println(s2.length());

 

 

 

3. 문자열 연습문제

 

 - .indexOf(delim) : 객체에서 delim(구분자)가 등장한 시점을 카운트한다.

 - .lastIndexOf(delim) : 객체에서 delim(구분자가)가 마지막으로 등장한 시점을 카운트한다.

 - .substring(a, b) : 문자열의 a번째부터 b번째 문자까지만 출력한다.

 

package oop0908;

import java.util.StringTokenizer;

public class Test04_quiz {

	public static void main(String[] args) {
		// String 관련 연습문제

		//문1) 이메일 주소에 @문자 있으면
        //    @글자 기준으로 문자열을 분리해서 출력하고
        //    @문자 없다면 "이메일주소 틀림" 메세지를 출력하시오        
        /*    
              출력결과
              webmaster
              itwill.co.kr
        */
		
		String email=new String("webmaster@itwill.co.kr");
		
		/*
		내 풀이
		
		StringTokenizer st= new StringTokenizer(email, "@");
		if(st.countTokens()==1) {
			System.out.println("이메일 주소 틀림");
		} else {
			while(st.hasMoreTokens()) {
				System.out.println(st.nextToken());
			} // while end
		} // if end
		*/

		// 강사님 풀이
		if(email.indexOf("@")==-1) {
			System.out.println("이메일 주소 틀림!!");
		} else {
			System.out.println("이메일 주소 맞음");
			
			int pos=email.indexOf("@");
//			System.out.println(pos); // 9 > 골뱅이는 9번째에 있음
			
			String id = email.substring(0, pos); // 문자의 꼬리말 공간 확보
			String sever = email.substring(pos+1);
			
			System.out.println(id);
			System.out.println(sever);
		}
		
		
		//문2) 이미지 파일만 첨부 (.png .jpg .gif)
        /*     
               출력결과 
               파일명 : sky2022.09.08
               확장명 : png
        */

		String path=new String("i:/frontend/images/sky2022.09.08.png");

		/*
		내 풀이
		String[] word = path.split("/");
		String tmp = new String(word[word.length-1]);
		String[] ext = tmp.split("");
		System.out.println(ext.length);
		
		// 파일명 출력하기
		System.out.print("파일명 : ");
		for(int i=0; i<ext.length; i++) {
			if(i<ext.length-4) {
				System.out.print(ext[i]);
			} // if end
		} // for end
		
		// 확장명 출력하기
		System.out.print("\n확장명 : ");
		for(int i=0; i<ext.length; i++) {
			if(i>ext.length-4){
				System.out.print(ext[i]);
			} // if end
		} // for end
		System.out.println();
		*/
		
		
		// 강사님 풀이
		
		// 마지막 "/" 기호의 순서값
		int lastSlash=path.lastIndexOf("/");
//		System.out.println(lastSlash);	// 18
		
		// 전체 파일명
		String file = path.substring(lastSlash+1);
//		System.out.println("전체 파일명 : " + file);
		
		int lastDot = file.lastIndexOf(".");
//		System.out.println(lastDot);	// 13
		
		String fname = file.substring(0, lastDot); // 문자의 꼬리말 공간 확보
		String ename = file.substring(lastDot+1);
		
		System.out.println("파일명 : " + fname);
		System.out.println("확장명 : " + ename);
		
        // 확장명을 전부 소문자로 치환
		ext=ext.toLowerCase();
		if(ext.equals("png") || ext.equals("jpg") || ext.equals("gif")) {
			System.out.println("파일이 전송되었습니다");
		} else {
			System.out.println("이미지 파일만 가능합니다");
		}
		
	} // main() end
} // class end
저작자표시 비영리 동일조건 (새창열림)

'⁂ Java > : 기본 익히기' 카테고리의 다른 글

[JAVA] #6-1 Static  (0) 2022.09.13
[JAVA] #5-5 This와 This()  (0) 2022.09.13
[JAVA] #5-3 생성자 함수(Constructor)  (0) 2022.09.08
[JAVA] #5-2 New 연산자 - 참조 자료형을 이해해보자  (0) 2022.09.08
[JAVA] #5-1 클래스(Class)  (2) 2022.09.08
    '⁂ Java/: 기본 익히기' 카테고리의 다른 글
    • [JAVA] #6-1 Static
    • [JAVA] #5-5 This와 This()
    • [JAVA] #5-3 생성자 함수(Constructor)
    • [JAVA] #5-2 New 연산자 - 참조 자료형을 이해해보자
    김갱환
    김갱환
    코딩의 코자도 모르는 이의 공부 기록장

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.