코딩이란 무엇일까

Java/자바[19일차] (1)-StringBuffer클래스,StringTokenizer클래스 본문

국비지원수업

Java/자바[19일차] (1)-StringBuffer클래스,StringTokenizer클래스

둥구는 지굴다 2022. 11. 15. 22:10

 StringBuffer클래스

String클래스는 불변 객체입니다. 

String객체의 값을 바꾸면 새로운 참조 값을 갖습니다.

따라서 자주 사용할수록 느려진다는 단점이 있습니다.

이러한 단점을 보완하기 위한 클래스가 StringBuffer클래스입니다.

StringBuffer클래스는 객체 안의 데이터를 내부적으로 변경할 수 있으므로

새로운 객체를 만들지 않는 가변 객체입니다.


StringBuffer클래스의 메서드

메서드 설명
append( ) 매개변수로 입력된 값을 문자열로 바꾸어서 더해주는 메서드
reverse( ) 문자열의 순서를 반대로 나열하는 메서드
insert(int pos,Object obj) 두 번째 매개변수의 값을 문자열로 바꾸어서 pos위치에 추가하는 메서드
delete(int start, ine end) start 위치부터 end 직전 위치의 문자열을 제거하는 메섣,
deleteCharAt(int index) index위치에 있는 문자를 제거하는 메서드

StringBuffer클래스 사용

String 클래스의 참조 값 변화 16진수로 보기

for(int i=0;i<5;i++) {
			result +=i+"/"; //result = result+i+"/";
			System.out.println("중간결과 result :"+ result);
			System.out.println("중간결과 result 객체 :"+ Integer.toHexString(result.hashCode()));
		}

출력 결과

String클래스는 객체에 값이 들어갈 때마다 참조 값이 변경되는 것을 확인할 수 있습니다.


StringBuffer클래스의 참조 값 변화 16진수로 보기

StringBuffer sb= new StringBuffer();
		System.out.println("초기 sb:"+ sb);
		for(int i=0;i<5;i++) {
			sb.append(i).append(":");
			System.out.println("중간결과 sb :"+ sb);
			System.out.println("중간결과 sb 객체 :"+ Integer.toHexString(sb.hashCode()));
		}

출력 결과

StringBuffer 객체에 값이 추가되어도 참조 값이 변경되지 않는 것을 볼 수 있습니다.


StringBuffer클래스 메서드 사용해보기

append( ) : 매개변수로 입력된 값을 문자열로 바꾸어서 더해줍니다.

sb.append(1+".").append("append");
		System.out.println(sb);
//출력 결과 : 1.append

reverse( ) :문자열의 순서를 반대로 나열합니다.

System.out.println(sb.reverse());
//출력 결과:dneppa.1

insert(int pos, Object obj) : 두 번째 매개변수의 값을 문자열로 바꾸어서 pos위치에 추가합니다.

sb.insert(0, "2.insert"); //0번째 위치에 추가
		System.out.println(sb);
//출력 결과: 2.insert1.append

delete(int start, int end ) :start위치부터 end 직전 위치의 문자열을 제거합니다.

sb.delete(0, 8);
		System.out.println(sb); //2.insert삭제
//출력 결과 : 1.append

deleteCharAt(int index) : index위치에 있는 문자를 제거

sb.deleteCharAt(0);
		System.out.println(sb);
//출력 결과 : .append

StringTokenizer클래스

StringTokenizer 클래스는 java.util패키지에 있는 클래스로

문자열을 구분 문자열 기준으로 분리할 때 사용합니다.


StringTokenizer 메서드

메서드 설명
nextToken( ) 다음 토큰으로 이동
hasMoreTokens( ) 다옴 토큰이 존재하면 true, 존재하지 않으면 false
countTokens 남은 토큰의 개수

StringTokenizer 사용해보기

String s="이름 : 홍길동 나이:30 거주지:서울";
		
		StringTokenizer st= new  StringTokenizer(s,": " ); 
		
		
		while(st.hasMoreTokens()) {
			System.out.println(st.nextToken());
		}

출력 결과

"이름 : 홍길동 나이:30 거주지:서울" 문자열이

: 기준으로 나누어진 것을 확인할 수 있습니다.


문자열을 StringTokenizer로 나누어 List객체 추가해보기

Info클래스

public class Info {
		private String name;
		private int age;
		private String email;
		private String domain;
		private int userN;
		
		public Info(String name,int age,String email,String domain,int userN) {
			this.name=name;
			this.age=age;
			this.email=email;
			this.domain=domain;
			this.userN=userN;
		}

		@Override
		public String toString() {
			return "Info [name=" + name + ", age=" + age + "
              	,email=" + email + ", domain=" + domain + 
              	", userN="+ userN + "]";
		}
}

메인 메서드

public static void main(String[] args) {
		//아래의 문자열을  StringTokenizer를 사용해 구분문자를 나눈 뒤 List에 객체별로 담아줍니다.
		String info="[홍길동,23,coding123@naver.com,1],[카리나,23,coco123@gmail.com,2],[즐라탄,43,Acmilano123@daum.com,3],";
		
		
		StringTokenizer st= new  StringTokenizer(info,",[]@:");
		int i=0;
		List<Info>in=new ArrayList<>();
		while(st.hasMoreTokens()) {
			in.add(new Info( //생성자
					st.nextToken(), //name 초기화
					Integer.parseInt(st.nextToken()), //age 초기화
					st.nextToken(), //email 초기화
					st.nextToken(), //domain 초기화
					Integer.parseInt(st.nextToken()) //userN 초기화
					));
			System.out.println(in.get(i).toString()); //ArrayList의 인덱스별 객체값 출력
			i++;
		}

이번에는 info라는 회원정보를 담은 문자열을 StringTokenizer클래스에서 구분 문자를 사용해 나눈 뒤

각각의 값을 객체별로 Info에 넣어 ArrayList에 객체를 추가했습니다.



Comments