개발자 끄적끄적
Java Lang 패키지 - String, 컬렉션(List) 본문
<toString 메서드>
- 인스턴스에 대한 정보를 문자열로 제공한다
- 반환되는 기본 문자열은 자신의 클래스명 @hashCode()의 결과 값이다
- 메서드를 재정의하여 클래스가 기본적으로 출력해야 하는 문자열을 만들어
사용자에게 제공할 수 있다
<String>
- 고정 문자열을 처리하는 각종 메서드가 있다
- char charAt(int p) : p위치의 문자를 하나 반환
- byte[] getBytes(encoding) : 문자열을 encoding 방식으로 변환
- int length() : 문자열의 길이를 구한다
- int indexOf(String str[, int offset]) : str의 위치를 구한다
못찾은 경우 -1을 반환. offset이 지정되면 그 이후의 위치부터 찾는다
*콤마(,)나 닷(.)도 자리수에 포함한다
- String[] sprit(String str, int arg1) | String[] sprit(String regexp) : 문자열을 str이나
정규 표현식으로 나눈다
arg1이 있으면 arg1의 갯수만큼만 나눈다
반환형은 '문자열의 배열'이다
- String substring(int 시작위치[, int 끝위치]) : 시작위치에서 끝위치 전까지 문자열 반환
끝 위치가 생략되면 시작위치에서 문자열 끝까지 반환
- String trim() : 양쪽 공백을 제거한 문자열 반환
- String replace(바뀔 문자열, 바꿀 문자열) | String replaceAll(정규식, 바꿀 문자열) :
문자열을 바꾸어 새로운 문자열 반환
ex1)
String str = "abc.123.def,456.abc,123"
1) str에서 1이 시작되는 위치를 찾아 출력
String str = "abc,123.def,456.abc,123";
//str에서 1이 시작되는 위치
int index = str.indexOf("1",5);
출력 :
1의 시작 위치 : 20
ex2) ","를 기준으로 문자열을 쪼개 출력
String[] r = str.split(",");
for(int i=0; i<r.length; i++) {
System.out.println(r[i]);
}
출력 :
abc
123.def
456.abc
123
ex3) 모든 "."을 ","을 바꾸어 출력
String r2 = str.replace(".", ",");
System.out.println(r2);
출력 :
abc,123,def,456,abc,123
ex4) str에서 ,와 .을 기준으로 모두 쪼개보자
String[] r3 = str.split(",|\\.");
for(int i=0; i<r3.length; i++) {
System.out.println(r3[i]);
}
출력 :
abc
123
def
456
abc
123
*자바 정규식표현(Regular Expression)에서
\. 은 패턴문자열을 나타내며 \\.는 문자 Dot(.)을 의미한다
ex5)substring((int형)x, (int형)y) => x보다 크거나 같고, y보다 작은 위치의 문자열을 반환
String nal = "2022-01-18";
String y = nal.substring(0, 4);
String m = nal.substring(5, 7);
String d = nal.substring(8); //=(8, 10);도 가능
System.out.println("년 :" + y);
System.out.println("월 :" + m);
System.out.println("일 :" + d);
출력 :
년 :2022
월 :01
일 :18
<StringBuffer | StringBuilder>
- String을 고정문자열이라고 한다면, StringBuffer나 StringBuilder는 가변 문자열
이라고 볼 수 있다
- 하나의 변수값이 자주 바뀐다면 String을 사용하는 것 보다 StringBuffer나
StringBuilder를 사용하는 편이 매우 유리하다
- 버퍼의 기본크기는 16characters이다
[주요 메서드]
- append(매개인자) : 문자열 끝에 매개인자값을 추가한다
*매개인자에는 자바가 사용하는 대부분의 자료형이 올 수 있다
- insert(int offset, 매개인자) : offset 위치에 매개인자값을 삽입한다
- delete(int start, int end) : start<=x<end 위치에 있는 문자열을 제거
- deleteCharAt(int index) : index위치의 문자값 제거
- replace(int start, int end, String str) : start<=x<end 위치에 있는 문자열을 str로 대치
- StringBuilder reverse() : 문자열의 순서를 바뀌어 새로운 StringBuilder로 반환
- setCharAt(int index, char ch) : index의 값을 ch로 변경
응용ex) String과 StringBuilder의 속도차
public class StringSpeed{
public StringSpeed(){
String str = "a";
long sTime=0, eTime=0, rTime=0, rTime2;
//String
sTime = System.currentTimeMillis(); //첫 시간
for(int i=0; i<99000; i++) str += "a";
eTime = System.currentTimeMillis(); //끝 시간
rTime = (eTime-sTime);
System.out.println("Time1 :" + (rTime/1000d) + "초");
//StringBuilder
StringBuilder sb = new StringBuilder();
sTime = System.currentTimeMillis();
for(int i=0; i<99000; i++) sb.append("a");
eTime = System.currentTimeMills();
rTime2 = (eTime-sTime);
System.out.println("Time2 :" + (rTime2/1000d) + "초");
System.out.println(rTime/rTime2 + "배");
}
public static void main(String[] args){
new StringSpeed();
}
}
출력 :
Time1 :2.167초 //String
Time2 :0.001초 //StringBuilder
2167배
<컬렉션>
- 자바에서 사용하는 자료 구조의 한 방법으로 배열의 단점을 보안하고 검색이나
정렬 등의 편의 기능들이 추가됨
*배열은 크기가 고정적이기 때문에 추가, 제거, 제어 할 때 힘들기 때문에
컬렉션 중 List를 사용한다
[종류]
- List
- Set
- Map
- Properties
[주요기능 비교 - CRED처리]
1. LIST
C(Create) : add
R(Read) : get
U(Update) : set
D(Delete) : remove
기타 특징
- 순서 있다
- 중복 가능
- 배열 구조와 유사
- interface이다
- 다형성이다
주요 클래스
- ArrayList, Vector
*ArrayList k = new List(); ->X
1. 객체 생성 자체가 불가능
2. 부모를 생성해서 자식타입에 대입할 수가 없다
[메서드]
- add(E) : 요소를 추가
- set(Index, E) : index 위치의 값을 E로 수정
- get(Index) : index 위치의 값을 가져온다
- remove(Index) : index 위치나 E의 값을 제거
remove(E)
- boolean contains(E) : E의 요소가 있는 지 판별
- boolean containsAll(List) : List요소의 부분 집합인가를 체크
- List<E>retainALl(List<E>) : 두 List의 교집합을 구한다
ex)[예] 개나리, 진달래, 코스모스, 장미, 백합, 아카시아를 List에 저장하고
저장된 값을 출력하시오.
package collect;
import java.util.ArrayList;
import java.util.List;
public class ListEx {
public static void main(String[] args) {
List<String> data = new ArrayList<String>();
data.add("개나리");
data.add("진달래");
data.add("장미");
data.add("목련");
data.add("백합");
for(int i=0; i<data.size(); i++) {
System.out.println(data.get(i));
}
//진달래 삭제
data.remove("진달래");
System.out.println("-----삭제 후-----");
System.out.println(data); //비추
//목련->코스모스
data.set(2, "코스모스");
System.out.println(data);
}
}
ex) 강사님 코드
1) List 컬렉션에 html, css, vb, javascript, oracle, java를 저장하시오
2) oracle을 찾아서 mysql로 수정
3) vb를 찾아 삭제
4) 최종 결과를 for문을 사용하여 출력
package collect;
import java.util.ArrayList;
import java.util.List;
public class ListEx {
public static void main(String[] args) {
//1)
List<String> subject = new ArrayList<String>();
String[] sub = {"html", "css", "vb", "javascript", 'oracle", "java"};
subject = new ArrayList(Arrays.asList(sub)); //배열 전체를 List로 변환
String target = "oracle";
//2)
for(int i=0; i<subject.size(); i++){
if(subject.get(i).equals(target)){
subject.set(i, "mysql");
}
}
//3)
int index = subject.indexOf("vb"); //데이터를 찾는 방법2
subject.remove(index);
//4)
for(int i=0; i<subject.size(); i++)
System.out.println(subject.get(i));
}
}
ex)내 코드
package collect;
import java.util.ArrayList;
import java.util.List;
public class ListEx {
public static void main(String[] args) {
List<String> data1 = new ArrayList<String>();
data1.add("html");
data1.add("css");
data1.add("vb");
data1.add("javascript");
data1.add("oracle");
data1.add("java");
System.out.println("---1---");
for(int i=0; i<data1.size(); i++) {
System.out.println(data1.get(i));
}
System.out.println("---2---");
//2)
data1.set(4,"mysql");
for(int i=0; i<data1.size(); i++) {
System.out.println(data1.get(i));
}
System.out.println("---3---");
//3)
data1.remove(2);
for(int i=0; i<data1.size(); i++) {
System.out.println(data1.get(i));
}
}
}
'JAVA' 카테고리의 다른 글
String Tokenizer, Math, Format 클래스, 중첩 클래스 (0) | 2023.03.04 |
---|---|
Java Lang 패키지, Hashcode, 깊은 복사, 얕은 복사 (0) | 2023.03.04 |
GUI 프로그램 (0) | 2023.03.04 |