국비지원수업
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에 객체를 추가했습니다.