-
String관련 API개발/자바JAVA 2024. 2. 11. 15:37
▶String 관련 클래스
: String은 문자열을 다루기 위해 고안된 클래스 타입(참조 자료형)
> 불변 클래스임!!
--> 값을 수정할 때마다 메모리 공간 내부에서 값 변경이 일어나는게 아니라
메모리 공간의 할당이 새롭게 일어나기 때문
▶StringBuilder 와 StringBuffer
>값의 수정이 일어날 때 마다 메모리 공간의 할당이 계속 일어남.
이를 해결하기 위해 나온개념들임!!
> StringBuilder 가 속도가 조금 더 빠름, 동시에 여러일 처리 못함.
> StringBuffer 가 속도는 조금 느리나, 동시에 여러일 처리 가능!!( ==thread safe 하다)
◆StringBuilder는 이런식으로 사용가능하다!!
public void method4() { // StringBuilder 객체 사용법 StringBuilder sb = new StringBuilder(); System.out.println("sb : " + sb); // "" System.out.println(sb.hashCode()); // 474675244 // 문자열을 연이어주는 메소드 // [ 표현법 ] // sb.append(연이을문자열); sb.append("Hello"); // "" + "Hello" System.out.println("sb : " + sb); // "Hello" System.out.println(sb.hashCode()); // 474675244 }
◆ StringBuffer사용법
public void method5() { // StringBuffer 객체 사용법 StringBuffer sb = new StringBuffer(); System.out.println("sb : " + sb); // "" System.out.println(sb.hashCode()); // 932583850 // 문자열을 연이어주는 메소드 // [ 표현법 ] // sb.append(연이을문자열); sb.append("Goodbye"); // "" + "Goodbye" System.out.println("sb : " + sb); System.out.println(sb.hashCode()); // 932583850 }
▶문자열과 관련된 유용한 메소드들
◆문자열.CharAt(int index) : char
> 문자열로부터 전달받은 index 위치의 문자 하나만 뽑아서 리턴!!
String str1 = "Hell World" char ch = str1.charAt(3); System.out.println("ch : " + ch); // 'l'
*0부터 카운트 해야함.
◆ 문자열.concat(String str) : String
> 문자열과 전달된 또 다른 문자열을 하나로 합쳐서 리턴
String str2 = str1.concat("!!!"); // str2 = str1 + "!!!" System.out.println("str2 : " + str2); // "Hell World!!!"
◆ 문자열.length() : int
> 문자열의 길이를 반환
System.out.println("str1 의 길이 : " + str1.length()); // 10
◆ 문자열.substring(int beginIndex) : String
> 문자열의 beginIndex 위치에서부터 끝까지의 부분 문자열을 추출해서 리턴
문자열.substring(int beginIndex, int endIndex) : String
>문자열의 beginIndex 위치에서부터 endIndex - 1 까지의 부분 문자열을 추출해서 리턴
System.out.println(str1.substring(6)); // "orld" System.out.println(str1.substring(0, 6)); // "Hell W" // > 오버로딩된 형태임!!
◆ 문자열.replace(char old, char new) : String
> 문자열로부터 old 문자를 new 문자로 변환한 문자열 결과를 리턴
String str3 = str1.replace('l', 'c'); System.out.println("str3 : " + str3); // "Hecc Worcd"
◆ 문자열.trim() : String
> 문자열로부터 앞, 뒤의 공백을 제거한 문자열 리턴
String str4 = " JA VA "; System.out.println("trim() : " + str4.trim());
* 중간의 공백도 제거하고 싶다면??
> replace 메소드 활용.
System.out.println("중간 공백도 제거 : " + str4.replace(" ", ""));
◆ 문자열.toUpperCase() : String / 문자열.toLowerCase() : String
> 문자열을 모두 다 대/소 문자로 변경 후 결과 문자열 리턴
System.out.println("upper : " + str1.toUpperCase()); System.out.println("lower : " + str1.toLowerCase());
활용 -->
Scanner sc = new Scanner(System.in); System.out.print("종료하시겠습니까? (y/n) : "); // char answer = sc.nextLine().charAt(0); // 'Y' 'y' 'N' 'n' char answer = sc.nextLine().toUpperCase().charAt(0); // 'Y' 'N' // > 메소드체이닝 : 메소드를 연이어 호출한다. if(answer == 'Y') { System.out.println("종료합니다."); } else { System.out.println("종료하지 않습니다."); } */ // 문자열 --> char[] /* char[] arr = new char[str1.length()]; for(int i = 0; i < arr.length; i++) { arr[i] = str1.charAt(i); }
◆ 문자열.toCharArray() : char[]
> 문자열의 각 문자들을 char[] 배열에 옮겨 담은 후 해당 배열을 리턴
char[] arr = str1.toCharArray(); System.out.println(Arrays.toString(arr)); // char[] --> 문자열 char[] arr2 = {'a', 'p', 'p', 'l', 'e'}; /* String result = ""; for(int i = 0; i < arr2.length; i++) { result += arr2[i]; }
>static valueOf(char[] data) : String
> 전달된 char[] 에 담긴 문자들을 하나의 문자열로 연이어서 리턴
System.out.println(String.valueOf(arr2));
▶ 사용자에게 채팅을 입력받아 불필요한 단어를 제거한 뒤 출력하는 프로그램
// 불필요한 단어 (욕설) : ~~~ // 이런 개나리같은 신발끈 호루라기야 // 이런 ***같은 *** ****야 // 필터링할 단어들을 배열로 셋팅 String[] filter = {"신발끈", "개나리", "수박씨", "호루라기" , "시베리아", "십장생", "조카", "주옥", "쌍쌍바", "십자수"}; // 사용자로부터 채팅 내용 입력받기 Scanner sc = new Scanner(System.in); System.out.print("메세지를 입력하세요 : "); String str = sc.nextLine(); // 입력받은 문자열에 filter 배열에 포함된 단어가 하나라도 있는지 검사 for(int i = 0; i < filter.length; i++) { int size = filter[i].length(); /* String chat = ""; for(int j = 0; j < size; j++) { chat += "*"; } */ String chat = "" + filter[i].charAt(0); for(int j = 0; j < size - 1; j++) { chat += "*"; } str = str.replace(filter[i], chat); } System.out.println(str); }
▶ 문자열을 "단어" 단위로 분리하는 방법
◆ 방법1) 분리된 문자열들을 String[] 배열에 차곡차곡 담아서 관리하는 방법
> 문자열.split(String 구분자) : String[]
String str = "Java,Oracle,JDBC,HTML,Server,Spring"; String[] arr = str.split(","); for(int i = 0; i < arr.length; i++) { System.out.println(arr[i]); }
*배열의 경우 for문을 다음과 같이 쓸 수도 있다. (향상된 for문, foreach문)
// for(값을받아줄변수선언문 : 순차적으로접근할배열명) { } for(String s : arr) { System.out.println(s); }
◆방법2 ) StringTokenizer 클래스를 이용해서 분리된 단어들을 토큰 단위로 취급하는 방법
>* java.util.StringTokenizer 클래스, 객체 생성 시 매개변수로 문자열과 구분자를 제시하면 됨
StringTokenizer stn = new StringTokenizer(str, ","); System.out.println("분리된 문자열의 갯수 : " + stn.countTokens()); // 분리된 토큰들을 하나씩 뽑아서 출력 // > stn.nextToken(); 메소드 활용 System.out.println(stn.nextToken()); // Java System.out.println(stn.nextToken()); // Oracle System.out.println(stn.nextToken()); // JDBC System.out.println(stn.nextToken()); // HTML System.out.println(stn.nextToken()); // Server System.out.println(stn.nextToken()); // Spring System.out.println("현재 담겨있는 문자열의 갯수 : " + stn.countTokens());
만약 더이상 없는데 뽑으려 한다면
NoSuchElementException 오류 발생 = 현재 남아있는 stn 토큰의 갯수의 범위를 벗어나면 더이상 뽑을 요소가 없어서 오류 발생
while 문으로 뽑아도 됨!!
while(stn.hasMoreTokens()) { System.out.println(stn.nextToken()); }
'개발 > 자바JAVA' 카테고리의 다른 글
java.util.Date 클래스 (1) 2024.02.11 예외 처리(Exception) (0) 2024.02.05 기본API(Application Programming Interface) (0) 2024.02.02 추상클래스(Abstract Class) (0) 2024.02.02 다형성(Polymorphism) (1) 2024.01.31