티스토리 뷰
API (Application Programming Interface) :
프로그램 언어나 운영 체제가 제공하는 기능을 사용할 수 있게 만든 인터페이스
String 자체가 API 이다
' == ' VS equals()
== 를 내용이 같은지 비교할 때 사용하면 Error가 날 수 있으므로 주의할 것
문자열의 내용이 같은지 다른지 비교할 때는 equals() 메소드를 이용하자
str1, str2 의 내용이 같으니 결과는 '같은 내용'으로 나올 것
length() 메소드 : 문자열의 길이를 리턴한다.
- 문자열 변수명.length()
equals() : 문자열의 내용을 비교
결과는 true ,false 값으로 나옴
equalsIgnoreCase() : 대소문자 구분없이 비교해주는 메소드
대소문자가 달라도 같은 값이라고 리턴해줌
chatAt() : 문자열 중에서 해당 인덱스의 문자 하나를 리턴
str3 = "hello" 이고 1번째 인덱스를 리턴해야하므로 e 가 출력되어야한다.
indexOf() : 해당 문자 또는 문자열이 처음으로 등장하는 인덱스를 리턴한다
해당 문자 또는 문자열이 없으면 -1을 리턴한다
lastIndexOf() : 문자 또는 문자열이 가장 마지막으로 등장하는 인덱스를 리턴
startWith() : 해당 문자열로 시작하는지 아닌지 확인한다 (T / F 로 반환)
contains() : 해당 문자열이 포함됐는지 아닌지 확인한다. (T / F 로 반환)
split() : 문자열을 특정 기준(구분자)으로 나눠서 배열로 리턴한다.
주의할 점 :: 특수기호 ( . $ () [ { ^ ? * | + \\ ) 사용은 기호 앞에 "\\" 를 붙여야 한다.
" \\ " or " : " 기준으로 배열로 나누고 싶을 때
Quiz ) 위 문자열을 "2024" , "02" , "19" , "11" , "30" , "42" 로 나누기
월 데이터가 1월 ~ 6월 이면 "상반기" , 7월 ~ 12월이면 "하반기" 가 출력되도록 코드를 작성한다!
1) 문자열을 나누기 위해서 기준을 " - " / " "(공백) / " : " 로 나눔
2) 문자열을 숫자로 변환하기 위해 Integer.parseInt() 메소드를 사용한다.
배열로 나눈 첫 번째 인덱스(div[1]) 에는 월 데이터가 들어가게 되므로
3) if문을 사용하여 1 <= month <= 6 이면 "상반기" 를, 이외는 "하반기"로 출력하도록 한다
compareTo() : 해당 문자열과 비교해서 서로 다른 문자의 개수 리턴
compareToIgnoreCase() : 해당 문자열과 대소문자 구분없이 비교 후 서로 다른 문자의 개수 리턴
compareTo()는 해당 문자열과 서로 다른 문자의 개수를 리턴하는데
()안에 있는 문자를 기준으로 앞이면 - , 뒤면 양수값이 나온다
예를 들어 str10.compareTo("a") 는 기준인 a의 뒤의 다른 문자의 개수 2를 리턴하고
str10. compareTo("b")는 0 -> -1 개 이렇게 리턴??
toUpperCase() : 문자열을 대소문자로 변경
toLowerCase() : 문자열을 소문자로 변경
substring(begin, end) : begin부터 end까지 문자열을 리턴
begin = 0 , end = 5 라고 할 때, 0<= index < 5 의 범위를 리턴한다
Java만 출력하고 싶은데 만약 동적으로 바뀌는 문자열이라면?
begin , end 를 어떻게 설정해야 할까?
indexOf()를 이용해 J가 처음 나오는 인덱스를 리턴하고 .length()를 사용하여 마지막 문자열을 리턴한다
concat() : 문자열을 이어주는 메소드
replace(A,B) : A 문자열을 B로 변경
String 클래스 : immutable 클래스(내용이 바뀌지 않는 클래스)
StringBuffer, StringBuilder : mutable 클래스(내용을 바꿀 수 있는 클래스)
StringBuffer : Java 1.0 버전부터 사용된 클래스
- 추가/삭제 속도가 느림
- Thread-safe : 쓰레드에 안전한 클래스
- 멀티쓰레드 환경에서 사용하기 적합
StringBuilder : Java 5.0 버전부터 사용된 클래스
- 추가/삭제 속도가 빠름
- Thread-unsafe : 쓰레드에 안전하지 않은 클래스
- 싱글쓰레드 환경에서 사용하기 적합 그 외 모든 기능이 동일(동일한 기능의 메소드들을 가지고 있음)
** buffer / builder 는 한 공간에서 쌓는다.
** concat , + 는 만들 때 마다 새로 공간에 만든다.
중간에 한 줄을 추가하여 sdf.format(null); 의 null 값에 넣기
잘 모를때는 해당 메소드를 클릭하면 어떤 타입을 넣어야할 지 나온다! (힌트)
Wrapper 클래스 : 자바의 기본 데이터 타입을 감싸는 클래스
- 기본 자료형 : boolean, byte, short , int , long, char, float , double
- Wrapper 클래스 : Boolean , Byte, Short , Integer , Long , Character , Float , Double
- Wrapper 클래스를 사용하는 이유 :
1. 클래스의 메소드(기능), 상수(public static final)을 사용하기 위해서
2. 매개변수 Object를 갖는 메소드의 인자값으로 사용하기 위해서
3. 컬렉션 프레임워크에서 사용하기 위해서
BigInteger : 저장할 수 있는 정수값의 한계가 없는 클래스
BigDecimal : 실수 계산의 오차를 줄이거나 없애기 위해서 만들어진 클래스
auto boxing 과 auto unboxing 기능을 제공하지 않음
-> 생성자를 호출하여 인스턴스를 생성해야 함
-> 산술연산(+, -, *, / 등등) 은 메소드를 사용해야함
오늘의 HW5
어려웠거나 모르는 부분 : 하이라이트 친 부분,
문자열 배열을 숫자로 바꿔야 하는데.. 반복문을 사용하기 전에 배열을 또 만들어야하는지
배열안에 배열을 넣어도 되는지 고민했음..
gtp의 도움을 좀 받아서... for-each 구문안에 int 변수를 선언 하고 그 변수안에 문자열을 정수로 바꾼 값을 저장했음
div의 모든 배열을 str1라는 변수로 받아서(?) 바로 넣으면 가능하긴 하더라구욤...
그대로 add에 더하고 for 문이 다 끝나고 마지막 더해진 값을 출력했음
indexOf()를 사용해서 "자바"가 문자열에있는지 확인하려고 했는데... 뭔가 잘못된듯!
indexOf() : 해당 문자 또는 문자열이 처음으로 등장하는 인덱스를 리턴
해당 문자 또는 문자열이 없으면 -1을 리턴
indexOf() 는 true or false를 리턴해주는게 아니라 처음등장하는 인덱스를 리턴한다고 하는데 -3304가 해당 인덱스인듯
아래 if 문에서는 해당 문자가 없음 -1을 리턴하는 방식을 사용해서 if문을 쓰고 있다