고래씌
[JAVA] 11-2. 기본 API(2) (StringTokenizer, StringBuffer, StringBuilder 클래스) 본문
[JAVA] 11-2. 기본 API(2) (StringTokenizer, StringBuffer, StringBuilder 클래스)
고래씌 2023. 10. 19. 11:551. 구분자를 제시해서 해당 문자열을 분리시키는 방법
(방법 1). 분리된 문자열들을 String[]배열에 담아서 관리하는 방법
▶ 문자열.split(구분자) : String[]
ex)
String str = "Java Oracle JDBC HTML CSS JavaScript Server";
String[] arr = str.split(" ");
for(int i=0; i<arr.length; i++) {
System.out.println(arr[i]);
}
▶ 배열, 컬렉션은 for문을 다음과 같이 사용 가능.(향상된 for문)
[표현법]
for( 순차적으로 접근한 인덱스의 값을 담아줄 참조변수 : 순차적으로 접근할 배열 ) {
실행할 코드
}
▶ 향상된 for문
: 인덱스에 순차적으로 접근하기위한 목적으로만 사용할 것을 권장
ex)
String str = "Java Oracle JDBC HTML CSS JavaScript Server";
String[] arr = str.split(" ");
for(String s : arr) {
System.out.println(s);
}
(방법2). 분리된 각각의 문자열들을 토큰으로 취급하고 싶을때
: java.util.StringTokenizer클래스를 이용한다.
ex)
String str = "Java Oracle JDBC HTML CSS JavaScript Server";
StringTokenizer stn = new StringTokenizer(str, " ");
System.out.println("분리된 문자열의 개수 : " + stn.countTokens());
// 현재 token의 순서 1
System.out.println(stn.nextToken());
// 현재 token의 순서 2
System.out.println(stn.nextToken());
...
System.out.println(stn.nextToken());
☞ 알아서 카운터 값을 증가 시켜서 다음 문자열을 출력함
ex) 이런 방법도 있다
String str = "Java Oracle JDBC HTML CSS JavaScript Server";
StringTokenizer stn = new StringTokenizer(str, " ");
int count=0;
int totalTokens = stn.countTokens();
while(stn.hasMoreElements()) { // 다음토큰이 존재하면 true, 없으면 false
System.out.println(stn.nextToken());
count++;
}
2. StringBuffer 와 String Builder?
▶ String을 불변클래스 imutable
▶ StringBuffer 와 String Builder? mutable 클래스(가변클래스)
문자열을 저장할 때 해당 메모리에서 수정을 함 => 메모리 저장공간을 훨씬 아낄 수 있다!
▶ 문자열 연산이 빈번하게 일어나는 프로세스 / 알고리즘에서 발생하는 메모리 이슈를 해결하기 위해 나온 클래스
▶ StringBuffer는 멀티스레드환경에서 유용하며 StringBuilder는 싱글스레드환경에서 유용하다.
(1) String 저장공간
ex 1)
String str = "hello"; // 저장공간 그대로 차지하고 있음
str += "world"; // hello world;
ex 2)
StringBuffer sb = new StringBuffer("Hello");
sb.append("World,");
StringBuilder sb2 = new StringBuilder("Hello");
System.out.println(sb.toString());
System.out.println(sb2);
(2) 문자열의 길이 및 위치
문자열.length()
문자열.indexOf()
ex1)
StringBuffer sb = new StringBuffer("Hello");
System.out.println("sb의 길이는? " + sb.length());
System.out.println("o의 위치는? " + sb.indexOf("o"));
ex2)
String filename = "TEST.ABC.txt";
String filename2 = filename.substring(0,filename.lastIndexOf("."));
StringBuffer sb = new StringBuffer("HelloWorld");
System.out.println("o의 마지막 위치는? " + sb.lastIndexOf("o"));
System.out.println("TEST.ABC.txt에서 확장자를 제외한 파일명? " + filename2);
(3) 인덱스위치의 문자를 없애는 메소드
마지막위치의 문자를 없애고 싶다?
마지막 위치 => 문자열의 길이 -1
(1)
StringBuffer sb = new StringBuffer("HelloWorld,");
sb.deleteCharAt(sb.length()-1);
System.out.println(sb);
(2) 내가 원하는 위치의 인덱스부터 내가 정한 마지막 인덱스까지 삭제
시작인덱스 <= 인덱스 범위 < 종료인덱스
StringBuffer sb = new StringBuffer("HelloWorld,");
System.out.println(sb.delete(1, sb.length()));
System.out.println("sb : "+ sb);
'JAVA > JAVA 기초' 카테고리의 다른 글
[JAVA] 11-3. 기본 API(3) 형변환 클래스(Wrapper 클래스) (0) | 2023.10.19 |
---|---|
[JAVA] API 실습 문제 (0) | 2023.10.19 |
[JAVA] 11-1. 기본 API(1) (Math 클래스, 문자열) (0) | 2023.10.18 |
[JAVA] 다형성(추상 클래스, 인터페이스 실습) (0) | 2023.10.18 |
[JAVA] 10-3. 다형성(추상클래스 abstract 와 인터페이스) (0) | 2023.10.18 |