StringBuffer
String 객체는 수정이 불가능하다
즉 한번 선언된 스트링 객체에 어떠한 문자열을 더하거나 빼는 동작을 수행하면 선언된 객체의 값이 바뀌는 것이 아니라 수정된 스트링 객체가 추가로 생성된다. 따라서 StringBuffer를 유용하게 사용할 수 있다.
가변 크기의 문자열 저장 클래스
Java.lang.StringBuffer
String 클래스와 달리 문자열 변경 가능
StringBuffer 객체의 크기는 스트링 길이에 따라 가변적
public class StringBufferEx01 {
public static void main(String[] args) {
String str1 = "Hello World";
String str2 = str1.substring(5);
System.out.println(str1);
System.out.println(str2);
String str3 = str1 + str2;
// 이 경우 -> 문자열 + 연산을 한번 하는것은 크게 상관 없으나
// 5만번 하게 된다면, 내부적으로 StringBuffer 객체가
// 5만개 만들어짐 -> 프로그램 속도 저하
System.out.println(str3);
String str4 = "";
for(int i=0; i<50000; i++) {
str4 += "*";
}
System.out.println(str4);
// 문자열을 반복문 안에서 많이 사용한다면 StringBuffer 클래스의 append함수를
// 이용하고, 출력에는 String.toString()을 사용해볼것
StringBuffer sb = new StringBuffer("Hello");
for(int i=0; i <50000; i++) {
sb.append("*");
}
System.out.println(sb.toString());
}
}
예제2
public class StringBufferEx02 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("역사를 하노라고 맨땅을 파다가 ");
System.out.println(sb);
System.out.println(sb.append("커다란 고인돌을 끄집어 내어놓고 보니"));
System.out.println(sb.insert(26, "하나 "));
System.out.println(sb.delete(21, 23));
System.out.println(sb.deleteCharAt(9));
System.out.println(sb.capacity()); //sb 버퍼 크기
}
}
실행결과
역사를 하노라고 맨땅을 파다가
역사를 하노라고 맨땅을 파다가 커다란 고인돌을 끄집어 내어놓고 보니
역사를 하노라고 맨땅을 파다가 커다란 고인돌을 하나 끄집어 내어놓고 보니
역사를 하노라고 맨땅을 파다가 커다란 돌을 하나 끄집어 내어놓고 보니
역사를 하노라고 땅을 파다가 커다란 돌을 하나 끄집어 내어놓고 보니
68
StringTokenizer
java.util.StringTokenizer
하나의 문자열을 여러 문자열로 분리
문자열을 분리할 때 사용되는 기준 문자 : 구분 문자(delimiter)
위 예에서 &가 구분 문자
토큰(token) : 구분 문자로 분리된 문자열
주요 메소드
int countTokens() : 스트링 토크나이저가 분리한 토큰의 개수 return
boolean hasMoreTokens() : 스트링 토크나이저에 다음 토큰이 있으면 return true
String nextToken() : 스트링 토크나이저에 들어있는 다음 토큰 return
예제 1
import java.util.StringTokenizer;
public class StringTokenizerEx {
public static void main(String[] args) {
StringTokenizer st = new StringTokenizer("홍길동/장화/홍련/콩쥐/팥쥐", "/");
while (st.hasMoreTokens())
System.out.println(st.nextToken());
}
}
실행결과
홍길동
장화
홍련
콩쥐
팥쥐
예제 2
import java.util.Scanner;
public class MainProgram {
public static void main(String[] args) {
String text = "";
MyTokenizer myTokenizer = new MyTokenizer();
Scanner scanner = new Scanner(System.in);
System.out.printf("분리할 텍스트 입력>>");
text = scanner.nextLine();
myTokenizer.getTokenArray(text, " ");
myTokenizer.showDictionary();
}
}
import java.util.StringTokenizer;
public class MyTokenizer {
/* Constants */
public static int MAX_ARRAY_SIZE = 10000;
public static int NOT_EXIST_WORD = -1;
public static int EMPTY_WORD_ARRAY = -1;
private StringToken[] tokenArray = new StringToken[MAX_ARRAY_SIZE];
private StringTokenizer stringTokenizer;
private String sepWord;
private int currentWordCount = 0;
public MyTokenizer() {
System.out.println("TokenArray initalize...");
for (int i=0; i<MAX_ARRAY_SIZE; i++) {
tokenArray[i] = new StringToken();
}
}
public void getTokenArray(String text, String separate) {
int returnIndex = 0;
stringTokenizer = new StringTokenizer(text, separate);
while(stringTokenizer.hasMoreTokens()) {
sepWord = stringTokenizer.nextToken();
returnIndex = isExistToken(sepWord);
if(returnIndex == -1) {
// 기존 단어 추가
addNewWord(sepWord);
} else {
// 새로운 단어 추가
addExistWord(returnIndex);
}
}
}
public int isExistToken(String word) {
if(currentWordCount == EMPTY_WORD_ARRAY) {
return EMPTY_WORD_ARRAY;
}
for(int i=0; i<currentWordCount; i++) {
if(tokenArray[i].getWord().equals(word)) {
return i;
}
}
return NOT_EXIST_WORD;
}
public void addNewWord(String word) {
tokenArray[currentWordCount].setWord(word);
tokenArray[currentWordCount].setCount(1);
currentWordCount++;
}
public void addExistWord(int findIndex) {
tokenArray[findIndex].setCount(
tokenArray[findIndex].getCount()+1);
}
public void showDictionary() {
for(int i=0; i<currentWordCount; i++) {
System.out.printf("[Index : %d][Word : %s][Count : %d]\n",
i, tokenArray[i].getWord(), tokenArray[i].getCount());
}
}
}
public class StringToken {
private String word;
private int count;
public StringToken() {
this.word = null;
count = 0;
}
public StringToken(String word, int count) {
this.word = word;
this.count = count;
}
public String getWord() {
return word;
}
public void setWord(String word) {
this.word = word;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
실행결과 -> 애국가 2절까지 입력
[Index : 0][Word : 동해물과][Count : 1]
[Index : 1][Word : 백두산이][Count : 1]
[Index : 2][Word : 마르고][Count : 1]
[Index : 3][Word : 닳다록][Count : 1]
[Index : 4][Word : 하느님이][Count : 1]
[Index : 5][Word : 보우하사][Count : 1]
[Index : 6][Word : 우리나라][Count : 1]
[Index : 7][Word : 만세][Count : 1]
[Index : 8][Word : 무궁화][Count : 2]
[Index : 9][Word : 삼천리][Count : 2]
[Index : 10][Word : 화려강산][Count : 2]
[Index : 11][Word : 대한사람][Count : 2]
[Index : 12][Word : 대한으로][Count : 2]
[Index : 13][Word : 길이보전하세][Count : 1]
[Index : 14][Word : 남산위에][Count : 1]
[Index : 15][Word : 저][Count : 1]
[Index : 16][Word : 소나무][Count : 1]
[Index : 17][Word : 철갑을][Count : 1]
[Index : 18][Word : 두른듯][Count : 1]
[Index : 19][Word : 바람서리][Count : 1]
[Index : 20][Word : 불변함은][Count : 1]
[Index : 21][Word : 우리][Count : 1]
[Index : 22][Word : 기상일세][Count : 1]
[Index : 23][Word : 길이][Count : 1]
[Index : 24][Word : 보전하세][Count : 1]
Scanner
import java.util.Scanner;
public class Information {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("인적사항 입력>>");
String name = in.next();
int age = in.nextInt();
double weight = in.nextDouble();
String addr = in.nextLine();
System.out.println("Name = " + name);
System.out.println("Age = " + age);
System.out.println("Weight = " + weight);
System.out.println("Addr = " + addr);
}
}
'Java' 카테고리의 다른 글
[Java] main() 메소드의 매개변수 args[] (0) | 2022.10.22 |
---|---|
[Java] Class (0) | 2022.10.22 |
[Java] 생성자 (Constructor) (0) | 2022.10.22 |
[Java] Static (0) | 2022.10.22 |
[Java] 상속 (0) | 2022.10.22 |