1. ==, = 차이
=
- 대입 연산자 (값을 넣을때 사용)
==
- 비교 연산자
[값(데이터) 비교]
기본 자료형에서 ==는 실제 저장된 값. 비교하는 비교연산자. ex) if(3 == 3)
참조형에서 == 는 주소 비교(단, 같은 클래스 타입끼리만 비교가능) ex) if("HELLO" == "HELLO") 주소비교
// 인스턴스화]
Aclass ac = new Aclass();
System.out.println(ac);
Bclass bc = new Bclass();
System.out.println(bc);
// 타입이 다르므로 주소비교 불가
// strResult = ac == bc ? "주소가 같다" : "주소가 다르다";[x]
Aclass ac2 = new Aclass();
// 타입이 같으므로 주소비교 가능
strResult = ac == ac2 ? "주소가 같다" : "주소가 다르다";
System.out.println(strResult);
System.out.println("ac= " + ac + ",ac2= " + ac2);
2. String
- 자바에서 String클래스는 프로그래밍에서 기본 자료형처럼 워낙 많이 쓰기 때문에 new 연산자를 사용하지 않아도 사용 가능 하다 (String클래스는 문자열과 관련된 값을 담당)
- 최상위 부모는 Object
1. equals() 메소드
- String에서 equals()메소드는 주소값 비교가 아닌 같은 문자열인지 비교를 하는것이고 맞으면 참, 틀리면 거짓
String str1 = "WORLD";
String str2 = "WORLD"; // str1와 str2 둘다 같은 heap영역의 주소값 참조
System.out.println("==로 주소비교 ] " + (str1 == str2));// true
System.out.println("equals()메소드로 주소비교] " + (str1.equals(str2)));// true
2. equalsIgnoreCase() 메소드
- equalsIgnoreCase()메소드는 대소문자 구분없이 비교
String str1 = "Hello";
String str2 = "HELLO";
// [equals()메소드]
System.out.println(str1.equals(str2) ? "문자열이 같다" : "문자열이 다르다"); // false
// [equalsIgnoreCase()메소드]
System.out.println(str1.equalsIgnoreCase(str2) ? "문자열이 같다" : "문자열이 다르다"); // true
3. toString() 메소드
- Object클래스의 toString()메소드를 메모리 주소가 아닌 실제 저장된 값이 오버라이딩 되어있다
String str1 = new String("자바"); // String str1 = "자바"; [o]
System.out.println(str1); // 자바
System.out.println(str1.toString()); // 자바
4. int length() 메소드
- 문자열의 길이를 반환
String str1 = "Welcome To Java!";
String str2 = "안녕 자바!";
System.out.println(str1.length()); // 16 (띄어쓰기 포함)
System.out.println(str2.length()); // 6
5. char charAt(int index) 메소드
- 문자열에서 index에 해당하는 하나의 문자를 반환한다 (index는 0부터 시작)
String str1 = "Welcome To Java!";
String str2 = "안녕 자바!";
System.out.println("str1의 5번째 문자] " + str1.charAt(4)); // o
System.out.println("str2의 5번째 문자] " + str2.charAt(4)); // 바
// 각 인덱스 위치에 해당하는 문자들 출력]
for (int i = 0; i < str1.length(); i++) {
System.out.printf("%d인덱스에 해당하는 문자] %c%n", i, str1.charAt(i));
} // for
// 0번인덱스 W ...
6. int codePointAt(int index) 메소드
- 아스키 코드 변환
String str1 = "Welcome To Java!";
String str2 = "안녕 자바!";
System.out.println(str1.codePointAt(3)); // 99
// 영문 외 문자는 Integer.toHexString인 16진수로 코드를 반환해서 출력해야됨
System.out.println(Integer.toHexString(str2.codePointAt(3))); // c790
System.out.println(WrapperClass03.isNumber("100") ? "숫자형식이다" : "숫자형식이 아니다");
System.out.println(WrapperClass03.isNumber("10A0") ? "숫자형식이다" : "숫자형식이 아니다");
7. int compareTo(String anotherString) 메소드
- 두 문자열을 비교하는데 첫번째 문자부터 순차적으로 비교
- 첫번째 문자열의 아스키 코드값이 크면 양수
- 첫번째 문자열의 아스키 코드값이 작으면 음수
- 첫번째와 두번째 문자열이 모두 같으면 0을 반환한다
- 두 문자열의 비교시에는 주로 equals()메소드 사용
- compareTo()메소드는 문자열로 정렬할때 사용(오버라이딩한 메소드 안에서)
String str3 = "ABc";
String str4 = "ABC";
System.out.println(str3.compareTo(str4)); // 32
System.out.println(str4.compareTo(str3)); // -32
System.out.println("ABCD".compareTo("ABCD") == 0 ? "문자열이 같다" : "문자열이 다르다"); // true
System.out.println("ABCD".compareTo("A"));// 3 , 글자수 차이를 반환 4-1
System.out.println("A".compareTo("ABCD"));// -3 , 글자수 차이를 반환 1-4
8. String concat(String string) 메소드
- 두 문자열을 연결할때 사용, + 와 같은 기능
System.out.println("JAVA".concat(" WORLD".concat(" HI")));
System.out.println("JAVA" + " WORLD" + " HI");
9. boolean contains(CharSequence string) 메소드
- 문자열에 특정 문자열이 포함되어 있는지 판단 (포함되어 있으면 참, 없으면 거짓)
String str1 = "Welcome To Java!";
System.out.println(str1.contains("To")); // true
System.out.println(str1.contains("to")); // false
String email = "kim@nate.com";
System.out.println(email.contains("@") ? "이메일 형식" : "이메일 형식이 아님");
10. static String copyValueOf(char[] data) 메소드
- static String copyValueOf(char[] data, int offset, int count)
- static String valueOf(char[] data)
- static String valueOf(char[] data, int offset, int count)
- char형 배열에 저장된 문자들을 String형으로 반환
char[] charr = { 'A', 'C', 'A', 'D', 'E', 'M', 'Y', '!' };
System.out.println(String.valueOf(charr)); // ACADEMY!
// 3(시작인덱스)번째인 D부터 뒤에 4(문자열로 만들 갯수)자리 출력
System.out.println(String.valueOf(charr, 3, 4)); // DEMY
System.out.println(String.valueOf(charr, 0, charr.length)); // ACADEMY!
// 메소드를 사용안하고 char형 배열에 저장된 문자들을 문자열로 변환]
String stringPlus = "";
for (int i = 0; i < charr.length; i++)
stringPlus += charr[i];
System.out.println(stringPlus); // ACADEMY!
11. boolean endsWith(String suffix 메소드
- 문자열이 특정 문자열로 끝나면 참, 아니면 거짓
System.out.println("www.nate.com".endsWith("com")); // true
System.out.println("www.nate.com".endsWith("co.kr")); // false
12. static String format(String format, Object... args) 메소드
- 출력 형식을 지정하여 문자열로 반환
System.out.printf("국어] %d ,영어] %d ,수학] %d ,평균] %.2f%n", 90, 90, 90, 270 / 3.0);
System.out.format("국어] %d ,영어] %d ,수학] %d ,평균] %.2f%n", 90, 90, 90, 270 / 3.0);
String.format("국어] %d ,영어] %d ,수학] %d ,평균] %.2f%n", 90, 90, 90, 270 / 3.0);// [x]안나옴
System.out.println(
String.format("국어] %d ,영어] %d ,수학] %d ,평균] %.2f%n", 90, 90, 90, 270 / 3.0));
----------------------------------------결과는 모두 같고 3번째는 안나옴
국어] 90 ,영어] 90 ,수학] 90 ,평균] 90.00
국어] 90 ,영어] 90 ,수학] 90 ,평균] 90.00
국어] 90 ,영어] 90 ,수학] 90 ,평균] 90.00
13. byte[] getBytes() 메소드
- 문자열을 byte형 배열로 반환(아스키 코드값으로 반환됨, 한글은 적용하지말자)
byte[] by = "ABCD".getBytes();// by[0]:65,by[1]:66.....
for (int i = 0; i < by.length; i++)
// 아스키 코드로 출력
// System.out.println(String.format("by[%d]:%d", i,by[i]));
// 해당 문자로 출력
System.out.println(String.format("by[%d]:%c", i, by[i]));
-----
by[0]:A
by[1]:B
by[2]:C
by[3]:D
14. char[] toCharArray() 메소드
- 문자열을 char형 배열로 반환 (=valueOf())
charr = "가나다라".toCharArray();
for (int i = 0; i < charr.length; i++)
System.out.println(String.format("charr[%d]:%c", i, charr[i]));
-----
charr[0]:가
charr[1]:나
charr[2]:다
charr[3]:라
15. int indexOf(String string) 메소드
- 문자열에서 특정 문자열의 시작 인덱스를 반환(특정 문자열이 없으면 -1 반환)
System.out.println("JAVA".indexOf("AVA"));// 1
System.out.println("JAVA".indexOf("A"));// 1
System.out.println("JAVA".indexOf("VA"));// 2
System.out.println("JAVA".indexOf("aVA"));// a는 없으니 -1
16. int lastIndexOf(String string) 메소드
- 문자열에서 특정 문자열의 시작 인덱스를 반환하는데 뒤에서 부터 찾음(특정 문자열이 없으면 -1 반환)
System.out.println("JAVA".lastIndexOf("AVA")); // 1
System.out.println("JAVA".lastIndexOf("A")); // 3
System.out.println("JAVAVAVA".lastIndexOf("VA")); // 6
System.out.println("JAVA".lastIndexOf("aVA")); // -1
System.out.println("my.file.txt".lastIndexOf(".")); // 7
17. String replace(char oldChar, char newChar) 메소드
- String replace(CharSequence target, CharSequence replace)
- 이전 문자를 새 문자로 교체
String str1 = "Welcome To Java!";
System.out.println(str1.replace('T', 'G')); // Welcome Go Java!, 바뀐 G가 새로운 heap영역에 생김
System.out.println(str1); // String형 안에 저장된 데이터는 불변 Welcome To Java!
System.out.println(str1.replace("Java", "Korea")); Welcome To Korea!
System.out.println(str1.replace("Hello", "안녕")); // Welcome To Java!
System.out.println(str1.replace("o", "a")); // Welcame Ta Java!
18. String[] split(String regex) 메소드
- 문자열을 특정 구분자로 분리해서 String형 배열로 반환
String tel = "010-1234-5678";// - 구분자
String[] strArr = tel.split("-");
// - 로 구분해서 쪼갬, strArr[0]:"010",strArr[1]:"1234",strArr[2]:"5678"
for (int i = 0; i < strArr.length; i++)
System.out.println(String.format("strArr[%d]:%s", i, strArr[i]));
// 없는 구분자로 split시 배열의 크기가 1인 메모리가 생성되며 전체 문자열이 인덱스가 0인 방에 저장됨
strArr = tel.split("@");
for (int i = 0; i < strArr.length; i++)
System.out.println(String.format("strArr[%d]:%s", i, strArr[i]));
email = "kim@naver.com";
strArr = email.split("\\."); // .은 정규표현식이 아니다 라는것을 알려주기 위해 \\를 붙임
for (int i = 0; i < strArr.length; i++)
System.out.println(String.format("strArr[%d]:%s", i, strArr[i]));
19. String substring(int beginIndex) 메소드
- 문자열에서 시작인덱스부터 문자열 끝까지 추출하는 메소드
System.out.println("Welcome".substring(3)); // come
String filename = "my.file.homework.ppt";
int beginIndex = filename.lastIndexOf(".") + 1;
System.out.println("확장자] " + filename.substring(beginIndex)); // ppt
20. String substring(int beginIndex, int endIndex) 메소드
- 문자열에서 시작인덱스부터 문자열 끝인덱스 -1 까지 추출하는 메소드
String[] emails = { "a@b.c", "kim@cyworld.com", "park@daum.net", "lee@naver.com" };
for (int i = 0; i < emails.length; i++) {
beginIndex = emails[i].indexOf("@") + 1;
int endIndex = emails[i].indexOf(".");
System.out.println(emails[i].substring(beginIndex, endIndex));
} // for
-----
nate
b
cyworld
daum
naver
21. String toLowerCase() 메소드
- 대문자를 소문자로
String str1 = "Welcome To Java!";
System.out.println(str1.toLowerCase()); // welcome to java!
22. String toUpperCase() 메소드
- 대문자를 소문자로
String str1 = "Welcome To Java!";
System.out.println(str1.toUpperCase()); // WELCOME TO JAVA!
23. String trim() 메소드
- 양쪽 끝에 공백 제거 (문자열 값 비교시 항상 trim해서 비교 해주는게 좋음)
System.out.println("X" + " J A V A " + "X");
System.out.println("X" + " J A V A ".trim() + "X");
-----
X J A V A X
XJ A V AX
2. StringBuffer
- String클래스는 String클래스의 메소드를 이용해서 새로운 문자열을 생성하면 원래 문자열은 변하지않고 새롭게 생성된 문자열을 저장하기 위해서 메모리가 생성된다. 이런 메모리 낭비를 막기위해서 StringBuffer클래스가 사용된다.
즉, StringBuffer클래스는 원래값이 변한다(메모리가 계속 생성 안됨)
1. 주요 메소드
- StringBuffer클래스를 생성(인스턴스화, 객체화)하면서 문자열 초기화 하지 않기
// StringBuffer buf = "HELLO"; [x] 직접 대입이 안됨
StringBuffer buf = new StringBuffer();
System.out.println(buf); // "" 공백
System.out.println(buf.toString()); // "" 공백
System.out.println(buf.length()); // 0
System.out.println(buf.capacity()); // 16, 기본 버퍼 크기
2. StringBuffer append("문자열")
- 문자열을 저장하며 계속 연결시켜 저장한다
StringBuffer buf = new StringBuffer();
buf.append("JAVA");
System.out.println(buf); // JAVA
System.out.println(buf.toString()); // JAVA
System.out.println(buf.length()); // 4
System.out.println(buf.capacity()); // 16
buf.append("0123456789").append("ABCD");
System.out.println(buf); // JAVA0123456789ABCD
System.out.println(buf.toString()); // JAVA0123456789ABCD
System.out.println(buf.length()); // 18
System.out.println(buf.capacity()); // 34
3. trimToSize()
- 저장된 문자열 만큼 버퍼크기를 줄인다
buf.trimToSize();
System.out.println(buf.capacity()); // 18, 34에서 18로 줄임
4. delete(int start, int end)
- start인덱스부터 end-1 인덱스까지 삭제
buf.delete(4, 14);// 숫자 부분만 삭제
System.out.println(buf); // JAVAABCD
System.out.println(buf.capacity()); // 18
5. deleteCharAt(int index)
- index 위치에 있는 문자 삭제
buf.deleteCharAt(4);
System.out.println(buf); // JAVABCD
6. insert(int index, String string)
- index 위치에 특정 문자 삽입
System.out.println(buf.insert(4, "12345")); // JAVA12345BCD
System.out.println(buf.insert(0, "가나다라")); // 가나다라JAVA12345BCD
// JAVA문자만 알고 있다 가정하고 이후 문자 삭제해보기
int start = buf.indexOf("JAVA") + "JAVA".length();
int end = buf.length();
System.out.println(buf.delete(start, end));// 가나다라JAVA
7. replace(int start, int end, String string)
- start인덱스부터 end-1인덱스까지의 문자열을 string으로 바꾼다
start = buf.indexOf("JAVA");
end = start + "JAVA".length();
System.out.println(buf.replace(start, end, "자바")); // 가나다라자바
8. reverse()
- 문자열을 거꾸로 배치
System.out.println(buf.reverse()); // 바자라다나가
'개발 > JAVA' 카테고리의 다른 글
13. JAVA 상속성 / 오버로딩(OverLoading) / 오버라이딩(OverRiding) / this / super (0) | 2020.06.08 |
---|---|
12. JAVA ect 클래스 (Math / Date / Calendar / SimpleDateFormat) (0) | 2020.06.08 |
10. JAVA static블락 / wrapper클래스 : 네이버 블로그 (0) | 2020.06.08 |
09. JAVA 클래스 / 객체 생성 및 사용 / 접근지정자 / 전역, 지역 변수 / static : 네이버 블로그 (0) | 2020.06.08 |
08. JAVA 제어문 - 조건문(IF, SWITCH) / 반복문(FOR, WHILE) / 중첩 (0) | 2020.06.08 |