문자열 관련된 함수📌들에 대해 공부했습니다
Application Programming Interface. API는 프로그래밍 언어나 운영체제가 제공하는 기능을 사용할 수있게 만든 인터페이스입니다. java에서 제공하는 많은 함수들도 API라고 해요!
리터럴 | 인스턴스 |
---|---|
상수, 1, 1.0, 20.0f, "abc" 등등 | new로 생성하는 객체 |
한번만 초기화하고 메모리 재활용 | 호출할때마다 새로운 주소값 할당 |
call by value | call by reference |
인스턴스는 new로 생성자를 호출할때마다 새로운 인스턴스가 생성되어 주소값이 달라져요. 그래서 new를 많이 쓰면 그만큼 메모리를 많이 차지하게되니 비효율적입니다
문자열 리터럴을 사용하여 초기화하는 경우에는 리터럴이 존재하지 않으면 새로운 인스턴스를 생성하지만 기존의 리터럴이 있는 경우에는 새로운 인스턴스를 생성하지 않고 기존의 인스턴스를 재활용해요! 그래서 문자열 내용이 같은 리터럴은 주소값이 똑같답니다.
이전에 배운 equals()와 똑같은 동작을 하는데요 차이점은 문자열의 대소문자 구별없이 내용만 비교하는 함수입니다! 내용이 같다면 true, 틀리면 false를 반환해요. UpperCase(대문자), LowerCase(소문자)를 (ignore)무시하고 비교한다고 읽으면 되겠어요 함수이름만 보고도 용도를 추측하기~
String str3="hello";
String str4="Hello";
System.out.println(str3.equals(str4)); //false
System.out.println(str3.equalsIgnoreCase(str4)); //true
해당 문자나 문자열이 처음으로 등장하는 인덱스 번호를 반환합니다. 대상이 문자열에 존재하지 않으면 -1을 반환합니다!
String str ="자바 프로그램";
int index = str.indexOf("자바");
if(index == -1) {
System.out.println("자바 문자열이 포함되어 있지 않습니다.");
}else {
System.out.println("자바 문자열이 포함되어 있습니다.");
}
해당 문자나 문자열이 가장 마지막으로 등장하는 인덱스 번호를 반환합니다. 만약 hello에서 'l'의 마지막 인덱스 번호는 4가 나오겠죠?
해당 문자열로 시작하는 문자열이라면 true, 아니면 false를 반환합니다.
String str1="https://www.google.com";
System.out.println(str1.startsWith("https://")); //true
해당 문자열을 포함하는 문자열이라면 true, 아니면 false를 반환합니다.
System.out.println(str1.contains("google")); //true
문자열을 특정 기준으로 나누어주는 함수입니다. 나누어진 문자열들은 배열에 저장합니다. 보통 이 특정 기준이라는 것에는 특수문자를 많이 사용하는데요. (.$|()[{^?*\)를 사용할 때는 기호 앞에 \\ 을 써줘야 컴퓨터가 인식해요
str.split("\\\\");
< \를 기준으로 나눌때
str.split("\\.");
< .을 기준으로 나눌때
나누는 조건이 여러개일땐? or의 역할인 '|' 을 사용합니다
String str="2021-07-21 12:44:00";
String[] result=str.split("-| |:");
해당 문자열과 비교해서 내 문자열과 다른 문자의 개수를 반환합니다. 만약 문자열의 뒷부분까지 같은 문자가 나오지 않는다면 그때까지의 다른 문자의 개수를 음수로 반환해요!
String str1="abc";
String str2="bbc";
System.out.println(str1.compareTo("abc")); //0
System.out.println(str1.compareTo("ab")); //1
System.out.println(str1.compareTo("a")); //2
System.out.println(str1.compareTo("c")); //-2
System.out.println(str1.compareTo(str2)); //-1
위의 compareTo()와 비슷하지만 대소문자는 구분하지 않고 문자열을 비교해 서로 다른 문자의 개수를 반환합니다
모든 문자열을 대문자로 변경해서 반환합니다.
모든 문자열을 소문자로 변경해서 반환합니다.
전체 문자열의 인덱스번호 begin부터 end-1까지의 문자열을 반환합니다.
문자열을 이어주는 메소드로 문자열의 바로뒤에 문자열을 이어서 출력합니다.
객체의 주소값을 고유정수로 변환한 값을 반환합니다. hashCode()의 값이 같으면 동일한 객체라는 것을 알 수 있어요
문자열을 연결하는 메소드로 concat()과 비슷해요! 대신 StringBuffer 문자열을 연결해요~
StringBuffer 문자열의 index부분에 문자열을 삽입합니다.
StringBuffer 문자열의 인덱스번호 start부터 end까지의 문자열을 삭제합니다.
StringBuffer 문자열의 인덱스번호 start부터 end까지의 문자열을 입력한 String으로 변환합니다.
전체 문자열에서 해당 앞의 문자열을 뒤의 문자열로 변환해줍니다.
원래 String은 내용변경이 불가능한 immutable 클래스입니다. 그런 String을 읽기용으로만 쓴다면 참 효율적인 변수가 될텐데요
만약 String의 내용을 수정한다면?
String str="abc";
System.out.println(str);
System.out.println(str.hashCode()); //96354
str=str+"def";
System.out.println(str);
System.out.println(str.hashCode()); //-1424385949
String은 내용이 바뀌면 주소값도 바뀌게됩니다. 그럼 문자열을 계속 바꿔야하는 변수가 있다면 그때마다 주소값도 새로 생기는데요 비효율적이죠? 주소값을 매번 생성하지않고도 문자열 내용을 바꾸는 것이 가능한 두 가지가 있어요! StringBuffer와 StringBulider를 mutable클래스라고 합니다.
StringBuffer | StringBuilder |
---|---|
Java 1.0 버전부터 사용 | Java 5.0 버전부터 사용 |
추가/삭제 속도가 느림 | 추가/삭제 속도가 빠름 |
Thread-safe | Thread-unsafe |
멀티쓰레드 환경 | 싱글쓰레드 환경 |
StringBuffer와 StringBulider는 속도와 쓰레드 환경말고는 동일한 메소드를 가지고 있으며 이외의 모든 기능이 똑같은 클래스입니다! 참조클래스라서 반드시 생성자를 사용해 초기화하고 사용해야해요. 문자열 String처럼 toString() 메소드가 override되어 변수이름으로도 문자열이 출력됩니다~
StringBuffer buffer = new StringBuffer("abc");
System.out.println(buffer.hashCode()); //1556956098
buffer.append("def").append("ghi");
System.out.println(buffer.hashCode()); //1556956098
StringBuffer를 사용하면 문자열의 내용이 바뀌어도 새로운 주소를 할당받지않은 채 수정하기 때문에 메모리 절약이 가능합니다.
정규표현식은 문자열에 나타나는 특정 문자의 조합을 확인하기 위해 사용합니다. 이해하기 어려 울 수 있어서 예제랑 함께 용도를 파악해봅시다!
전화번호 검증하기
- (02|010|031) : 02 또는 010 또는 031으로 시작하는 숫자 확인
- '-' : '-'기호 확인
- \d{3,4} : 3~4자리의 숫자 확인
- \d{4} : 4자리의 숫자 확인
String regExp="(02|010|031)-\\d{3,4}-\\d{4}"; boolean result=Pattern.matches(regExp, data); if(result) { System.out.println("정상적인 번호"); }else { System.out.println("비정상적인 번호"); }
이메일 검증하기
- \w+ : 한 개 이상의 알파벳 또는 숫자 확인
- @ : '@' 기호 확인
- . : '.' 기호 확인
- (.\w+)? : '.'과 한 개 이상의 알파벳 또는 숫자가 없을수도 있고 한번 더 있을 수 있다
regExp="\\w+@\\w+\\.\\w(\\.\\w+)?";
정규표현식을 담은 문자열과 검증 할 문자열을 비교해서 정규표현식을 적용한 문자열과 일치하면 true, 그렇지 않다면 false를 반환합니다.