[DAY23] String(중요),StringBuffer, StringBuilder, Random, UUID

NA YE SOM·2023년 7월 31일
0

ex13_Java_Api

★String

ex01_String 문자열 리터럴

자바가 제공하는 클래스 사용법 배우기
다 외우지 않아도 됨 -> 이해만




-> tom을 하나만 만듦


-> 문자열 가지고 name1 == name2하면 안되는데
리터럴의 비교는 참조값의 비교를 수행하는것
tom은 보지 않음

내용이 같다라는 것이 아니라
name 1과 name2의 참조값이 동일하다


-> 둘다 12345678번지이다. (tom을 본 것이 아님)

ex02 문자열 객체


-> 문자열 객체는 항상 새로 생성된다
(기존에 tom이 있든 말든 새로 만듦)


-> tom인지 아닌지 보지않음

-> 자바에 의해서 최적화해서 만들어져서 참조값이 동일해서 같은 문자열로 인식함

  • new : 있으면 무조건 만듦
  • new String에 의해서 만들어진것은 "참조값'이 항상다르다.

ex03 (equals) 문자열 비교 메소드



-> 대소문자도 일치해야 동일하다
(한글자라도 다른 대소문자 섞여있으면 문제발생함)


case를 무시 - upper case(대문자), lower case(소문자) : 대소문자 무시

사용자 서비스 처리할때 사용함
( 마음에 들었으면 ? Yes , yes)
-> 같은걸로 인식하려면


ex04 toUpeerCase, toLowerCase :


ex05 length : 길이 구하는 메소드

공백도 글자수에 포함


\n 줄바꿈 -> 1글자로 처리

ex06 charAt : 문자열의 특정 인덱스(Index) 문자를 반환하는 메소드


캐릭터 변환처럼 생겼음
배열로 안바꿔도 배열처럼 사용할 수 있는 것

-배열로 바꾸지 않아도 호출 가능

인덱스도 있고 길이도 있으니까 -> 배열처럼 쓸 수 있는데 무리 없음 (굳이 배열로 바꾸지 않아도)

★★★ex07 substring 메소드 (문자열에 어떤 부분만 보고싶을때 : 실무에 많음) -> 잘 공부해두기!


end 직전까지 반환

tom하고 cruise 분리


3번(공백) 이전까지

주소분리 /(슬래쉬)로 구분

-> list 부분을 우리가 정하는것 (mapping값 만들어서)

도메인은 돈주고 사는것 (comic.naver.com)

★★★substring인 능력 !! 잘 구분해서 공부하기

ex08 indexOf 정수값 반환(뭐 찾을때 몇번째 글자가 내가 원하는 글자인지 찾을때 씀)


-> 첫번째 걱정 다음 위치 두번째 걱정부터 찾겠음

ex09 lastIndexOf : 발견된 마지막 문자열의 인덱스를 반환

CharSequence

CharSequence 인터페이스는 Stirng을 구현하는 구현체


-> implements여러개 할 수 있음

ex10 contains : 지정된 CharSequence(String, char[] 등)가 포함되어 있으면 true 반환, 아니면 false반환



ex11 isEmpty 문자열 : 빈문자열이면 true를 반환, 아니면 false를 반환



띄어쓰기 -> 이름이 있다

ex11 isBlank 메소드 : 빈문자열이거나 공백 문자로 구성되었다면 true반환, 아니면 false 반환


공백 문자(white space)
-> 일반적인 경우 isEmpty가 대부분



-> 스페이스 넣고 동작
네이버처럼 스페이스나 스페이스 아니든 동일하게 처리시) isBlank() 처리함
우리는 검색을 안하면 검색 안시켜줌

ex12 format 메소드 : 1.문자열을 지정한 형식으로 반환 2.클래스 메소드이므로 String 클래스를 이용해서 호출함



(문어다리 octorpus -> 8개)


0붙이는 이유 : 빈자리를 0으로 채우기


1~12 월을 -> 01~12로 맞추는 방법(%02d)

-> 앞에만 0 채울수 있고 뒤에는 0채울 수 없음


100 적고 앞에 00 두자리 적기


-> 앞에 공백 5개 줄건지? 뒤에 공백 5개 줄건지?

정규식 : 아이디 검사하기 위해서 사용

(어떤 문자열에 패턴이 포함되어있는가?- 패턴 검사를 위한 방식)
-> 자바문법은 아님, 별도의 영역이 있음
-> 많은 언어들이 정규식을 가져와서 쓸 수 있음
(정규식 배우는 타이밍 : 구현할때)


-> javascript에서 배울 예정임

ex15_ 정규식을 활용한 메소드(startWith, endsWith, matches, replaceAll, split)

정규식 학습이 이루어지기전에는 함부로 쓰지말것!


replace 바꾼다



-> .(마침표)를 모두 _(밑줄)로 바꾸겠다



-> 대괄호[]로
=> 잘 모르면 사용하지 말것

ex13 strip trim 구분없이 써도 됨 : 앞,뒤에 포함된 공백 문자 제거


앞뒤로 공백

7글자

-> 공백이 제거 : 3만 남기를

ex14 replace메소드 : 1.지정된 문자열을 다른 문자열로 반환 2. 발견된 모든 문자열을 반환


-> replace라는 아이가 따로 있음


-> replaceAll은 정규식을 이용
-> replace는 문자열을 이용


-> 정규식 아니라 그냥 문자열

replace도 다바꾸는것

charsequenc - replace
regular expression - replaceAll

차이일뿐
-> 만약) 쓸일이 있으면 ) ex14 replace로 쓰기( 굳이 all안써도됨)

StringBuffer


-> 자바에서 예정되어있지 않음


-> 기본 패키지라 import는 안됨



-> 선언할때는 stringbuffer였지만 답으로 갈때는 string으로 바뀌어서 나간다(변환과정 필수)

문자열 리터럴 은 자바 관리
-> ha va 다르게 생겼으니 따로 만듦
--> 생각보다 쓸데없는 메모리 많이 씀
(hava 처럼 불필요한 중간메모리 많음)

+가 3번이상 반복되는경우 : stringBuffer로 바꿔서
(hava 같은애가 없어지겠금 만듦)

-> 중간객체가 생기지 않아서 메모리낭비 줄어듦


-> 스트링에 buffer(기억장치)를 달아놓고 누적시켜서 사용할 수 있게 해줌

StringBuilder : append, toString만 기억

qngBuilder


buffer만 쓰다가 조금 느린 것같아서 나온게 builder임


-> string 빌더가 마지막에는 string으로 바뀌어서 사용

반복적으로 연결되는 연산자는 builder나 buffer를 쓰겠다

Random(Math)

ex01


-> 0~1 사이의 소수점


-> 1.0은 나올 수 없음 최대 0.99999..


-> 0.1보다 작은 숫자가 나올 확률 10%((대략)


-> 이 숫자들을 가지고 대략적인 확률처리가 가능할듯?!

ex02 정수 난수로 바꿔서 사용하기


-> 정수 0,1,2 중 하나나옴



-> 1,2,3 만들어라 -> 1부터 3개


->실행할때마다 조금씩 다름

*random가지고 할 수 있는 일 : 게임(컴퓨터가 무슨 숫자를 만들지 모르니까)
-> 숫자 맞추기 게임 구현

Random(이름자체) _ 발전된 random

-> 우리가 쓸 건 x


-) seed전달 안하겠다 - 현재 시간을 가지고


-> int로 표현할 수 있는 최대, 최소 21억정도..
정확히 알 수 있는애

SecureRandom


-> ctrl + space 누르고 추천되는 변수이름 2개 제공 중 하나 고르기


-> random 처럼 seed전달도 할 수 있다(우리는 첫번째로)

★★★(실무에서 많이 씀) UUID(클래스이름이 다 대문자로) Random 덩어리를 만듦 (인증코드만들기) 긴문자 만듦

  • CS에서도 쓰임

32개짜리를 똑같이 또 만들 확률은 거의 없음 -> 현실에서는 중복된 값이 없는 것으로 판단함

확률상으로 똑같은것을 안만든다.

한자리가 16자리가 나오는데 이게 32자리 나오니까

-> 로또 10장 만들어도 안될 확률이기 때문에 전세계 개발자가 가져다 써도 같은 것이 나오지 않는다라고 봄


UUID를 쓰기만 하면 절대 중복이 안나옴


-> 하이픈(-)보다 나머지 숫자가 중요(중복이 많이 나옴)

★★★ securerandom : 인증코드 만들기(보안처리해서)

-> 숫자 4자리 만들기, 섞어서 6자리 만들기

어느 서버에 올릴 때 파일의 이름이 바뀌어서 올라감 -> 똑같은 파일이 2개 있으면 안되서
-> 이름처리시 : UUID파일로 바꾸어서 처리함(충돌안나게 : 바꾼 이름은 데이터베이스에 저장해놓고)

Timestamp(타임스탬프)


-> 2022-1970 = 52년이 몇초분의 1초일까?




-> milisecond 1000분의 1초


-> 7개월치가 아직 계산 x


-> long타입의 max value
-> 아직 멀음


-> 시드값을 long타입으로 계산해서 timestamp로 넘겨줌


-> ㄹ+ 한자
시간



나노초(10억분의 1초) -> 계산할 수 있음

단위가 충분히 낮은시간이 필요시) 시간을 2개 구함 -> 뺌

builder가 +를 대체해서 얼마나 성능이 향상되는가?


-> ABCDEFG .. 만들기

알파벳 26개 붙이기 전에 시간재고 끝나고 시간재고(STOPWATCH)


-> 몇번을 하든 string builder가 이겨야 함( 5배 정도 됨)

-> Nano는 2개를 재야 의미있음

profile
개발자 velog

2개의 댓글

comment-user-thumbnail
2023년 7월 31일

좋은 글 감사합니다.

1개의 답글