자바(java)_String 클래스
▶String
String은 단순히 문자열에서 정보를 추출하기위한 기본 기능뿐만 아니라 많은 기능들을 내포하고있다.
▶String 객체 선언
String str1 = "자바 Programming";
위는 일반적으로 우리가 흔히 알고있었던 String클래스 사용 방법이다.
String str2 = new String ("Java");
로도 가능하다.
String은 워낙 많이 사용하는 클래스이다보니 자바에서 간편하게 객체를 생성할 수 있도록 2번째 방법도 열어두었다.
▶문자열의 길이를 조회
int str1_len = str1.length();
int str2_len = str2.length();
syso(str1_len); //14
syso(str2_len); //4
근데, str1에는 자바 Programming 으로 띄어쓰기가 1개가 포함이 되어있다.
이걸로 보아 자바의 길이는 String타입의 length를 가지고 올 때는 공백도 포함해서 가지고 온다는 것을 알 수 있다.
▶특정 문자열이 처음으로 나타나는 위치를 조회
int str1_pos = str1.indexOf(" "); //공백이 처음으로 나타나는 위치
int str2_pos = str2.indexOf("a"); //a가 처음으로 나타나는 위치
syso(str1_pos); //2
syso(str2_pos); //1
2번째 str2를 보면 a는 Java 중 2번째에 위치해있는데 자바는 1을 출력했다.
이걸로 우린 String에서 위치를 체크할 땐 0부터 계산됨을 알 수 있다.
▶특정 문자열이 마지막으로 나타나는 위치를 조회
int str1_last_pos = str1.lastIndexOf(" ");
int str2_last_pos = str2.lastIndexOf("a");
syso(str1_last_pos); // 2
syso(str2_last_pos); // 3
str1을 먼저 살펴보자면 공백은 자바 programming 중 딱 한번 나온다. 그래서 공백은 위의 처음으로 나타나는 위치와 마지막으로 나타나는 위치가 동일한 것이고 str2는 "java"에서 a는 2번 나오니 3번째 자리에 a가 마지막으로 나온다는 것을 출력하고 있는 것이다.
▶A를 B로 변경하기
String new_str1 = str1.replace(" ", "*");
String new_str2 = str2.replace("a","A");
syso(new_str1); // 자바*Programming
syso(new_str2); // JAvA
▶대소문자변경
String upper = new_str1.toUpperCase();
String lower = new_str2.toLowerCase();
syso(upper); // 자바*PROGRAMMING
syso(lower); // jaVa
▶문자열의 앞 뒤 공백 제거
String input = " enjoy java programming ";
String output = input.trim();
syso(input); // enjoy java programmig
syso(output); // enjoy java programming
▶문자열의 모든 공백 제거
String output2 = input.replace(" ", "");
syso(output2); // enjoyjavaprogramming
이렇게 아까 확인했었던 A를 B로 바꾸는 replace를 통해서 모든 공백을 제거하는 것도 가능하다.
▶문자열 비교하기
boolean isSame = str1.equals(str2);
if( isSame){
syso("같다");
}else{
syso("다르다");
} // 다르다
▶문자열 자르기
String sub_str1 = str1.substring(0,2);
syso(sub_str1); // 자바
첫번째 파라미터는 시작위치 두번째 파라미터는 끝위치이다.
자바 Programming에서 0 = 자 1 = 바 2 = 공백이다.
위의 str1은 공백은 포함하지 않은 출력으로 0이상 2미만 즉, 시작위치 이상 끝위치 미만이라고 이해한다.
그럼 두번째 파라미터가 없는 경우는 어떻게 될까?
String sub_str2 = str1.substring(3);
syso(sub_str2) // Programming
으로 나오는데 이는 3부터 끝까지 잘라준 것을 알 수 있다.
▶형식에 따른 문자열 출력
%d | 정수 |
%s | 문자 |
%f | float형 소수 |
%3d | 숫자를 3의 자리로 맞춰서 출력하며 자릿수가 맞지 않을 경우 앞에 공백을 출력한다. |
%03d | 자릿수가 맞지 않을 경우 앞에 0을 출력한다. |
%3s | 문자열을 3의 자리로 맞춰서 출력하며 자릿수가 맞지 않을 경우 앞에 공백을 출력한다. (단, %303s와 같은 형식은 사용 불가) |
int yy = 2022;
int mm =3;
int dd = 3;
Stirng gender = "남자";
String result = String.format("%d년 %02d월",%02d일 %s", yy,mm,dd,gender);
syso(result); // 2022년 03월 03일 남자
format의 (format,args)의ㅣ 형식에서 format과 args의 순서와 숫자는 동일해야한다.
▶주어진 글자를 기준으로 잘라내어서 배열로 변환
String src = "C++/JAVA/C#/Javascript/VB";
String[] data = src.split("/");
for (int i = 0; i<data.length; i++){
syso(data[i]);
} // C++ Java C# Javascript VB
split를 통해 /를 기점으로 문자열을 나누어 배열을 만들어라라는 것으로 /를 기점으로하여 총 5칸의 배열이 있다는 것으로 자바는 인식을 해서 for을 통해 손쉽게 문자열을 컨트롤 할 수 있다.
▶기본 자료형을 문자열로 변경
int a = 1;
String str1 = String.valueOf(a);
syso(str1 instanceof String); // true
기본 int형을 String 타입으로 변경해주는 기능이다.
단, syso를 통해 str1을 하든 a를 넣어주든 값은 1이 나오기때문에 우린 String 타입인지 int타입인지 구분하기 어렵다. 이때 instaceof를 사용하여 true false로 구분해준다.
하지만, 문자열로 변환하는 가장 손쉬운 방법은 공백을 더하는 것이다.
String str1 = "" + e; // true
특정문자에 기본데이터타입으로 선언된 변수를 더해주면 그 변수가 string 타입으로 변환이 된다.
▶이스케이프 문자
프로그램의 문자열 안에 포함될 수 있는 특수문자
String src = "JAVA";
//문자열에 쌍따옴표 포함시키기
syso("\""+src); // "JAVA
즉, \가 뒤의 특수문자를 넣어주겠다. 라는 의미이다.
//문자열에 홑따옴표 포함시키기
syso("\'" + src + "\'") // 'JAVA'
//줄바꿈문자
syso("\n" + src) // JAVA
// 탭키에 해당하는 문자
syso("\t" + src) // JAVA