•᷄ ɞ•᷅ 문자열
문자들로 구성된 문장이다.
String a = "Happy Java";
String b = "a";
String c = "123";
String a = new String("Happy Java");
String b = new String("a");
String c = new String("123");
다음과 같이 표현할 수 있다.
첫번째 방식은 리터럴(literal) 표기이다.
리터럴 표기란 객체 생성없이 고정된 값을 그대로 대입하는 방법이다.
"Happy Java"라는 문자열을 JVM의 intern pool이라는 메모리 공간에 저장하고 다음 동일한 문자열이 선언될 때는 cache된 문자열을 리턴한다.
두번째 방식은 객체를 새롭게 만드는 방식이다.
new 키워드는 객체를 만들 때 사용된다.
실행될 때마다 항상 새로운 String 객체를 만든다.
두번째 방식보다 첫번째 방식을 사용하는 것이 가독성에 이점이 있고 컴파일 시 최적화에 도움을 준다.
•᷄ ɞ•᷅ 원시(primitive) 자료형
| 원시자료형 | int | long | double | float | boolean | char | 
| Wrapper 클래스 | Integer | Long | Double | Float | Boolean | Char | 
primitive 자료형은 각각 대응하는 Wrapper 클래스들이 존재한다.
데이터를 생성할 때 Wrapper 클래스를 사용해야 한다.
Wrapper 클래스를 사용하면 값 대신 객체를 주고 받을 수 있어 코드를 객체 중심적으로 작성하는데 유리하다.
또한 멀티 스레딩 환경에서 동기화를 지원하기 위해서도 Wrapper 클래스는 반드시 필요하다.
primitive 자료형은 리터럴(literal)로만 값을 세팅할 수 있으며, new 키워드로 값을 생성할 수 없다.
boolean result = true;
char a = 'A';
int i = 100000;
! String은 리터럴로 표기가 가능하지만 primitive 자료형이 아니다. (리터럴 표현식을 사용할 수 있도록 특별 대우)
•᷄ ɞ•᷅ 문자열 내장 메서드
(っ•ɞ•)っ equals : 두 개의 문자열이 동일한지 비교하여 결과값을 리턴
기준 문자열.equals(비교 문자열) 로 사용하며, 일치하면 true 그렇지 않으면 false를 반환한다.
String a = "hello";
String b = "java";
String c = "hello";
System.out.println(a.equals(b)); // false 출력
System.out.println(a.equals(c)); // true 출력
문자열을 비교할 경우 반드시 equals을 사용해야하며, == 연산자를 사용할 경우 객체를 생성하는 방식(리터럴/new)이 다를 경우 원하는 결과를 얻기 어렵다.
String a = "hello";
String b = new String("hello");
System.out.println(a.equals(b));  // true
System.out.println(a == b);  // false
(っ•ɞ•)っ indexOf : 문자열에서 특정 문자열이 시작되는 위치(인덱스)를 리턴
문자열.indexOf(특정 문자열) 로 사용하며, 문자열이 시작되는 위치를 반환한다.
String a = "Hello Java";
System.out.println(a.indexOf("Java"));  // 6 출력
결과값이 7이 아니라 6인 이유는 자바는 숫자를 0부터 세기 때문이다.
(っ•ɞ•)っ contains : 문자열에서 특정 문자열이 포함되어 있는지의 여부를 리턴
문자열.contains(문자열) 로 사용하며, 문자열이 포함되었는지 여부를 판단하여 포함되었다면 true, 아니라면 false를 반환한다.
String a = "Hello Java";
System.out.println(a.contains("Java"));  // true 출력
(っ•ɞ•)っ charAt : 문자열에서 특정 위치의 문자(char)를 리턴
문자열.charAt(인덱스) 로 사용하며, 인덱스에 해당하는 문자를 반환한다.
String a = "Hello Java";
System.out.println(a.charAt(6));  // "J" 출력
(っ•ɞ•)っ replaceAll : 문자열 중 특정 문자열을 다른 문자열로 바꾸고자 할 때 사용
문자열.replaceAll(기존 문자열, 특정 문자열) 로 사용하며, 기존 문자열을 특정 문자열로 바꾼 결과를 반환한다.
String a = "Hello Java";
System.out.println(a.replaceAll("Java", "World"));  // Hello World 출력
(っ•ɞ•)っ substring : 문자열 중 특정 부분을 뽑아낼 경우에 사용
문자열.substring(시작 인덱스, 끝 인덱스) 로 사용하며, 시작 인덱스부터 끝 인덱스-1까지를 뽑아내 반환한다.
String a = "Hello Java";
System.out.println(a.substring(0, 4));  // Hell 출력
(っ•ɞ•)っ toUpperCase : 문자열을 모두 대문자로 변경할 때 사용
문자열.toUpperCase( )로 사용하며, 문자열 전체를 대문자로 바꾸어 반환한다.
String a = "Hello Java";
System.out.println(a.toUpperCase());  // HELLO JAVA 출력
(っ•ɞ•)っ toLowerCase : 문자열을 모두 소문자로 변경할 때 사용
문자열.toLowerCase( )로 사용하며, 문자열 전체를 소문자로 바꾸어 반환한다.
String a = "Hello Java";
System.out.println(a.toLowerCase());  // hello java 출력
(っ•ɞ•)っ split : 문자열을 특정 구분자로 나누어 문자열 배열로 리턴
문자열.split(구분자) 로 사용하며, 구분자를 기준으로 문자열을 나누어 만들어진 문자열 배열을 반환한다.
String a = "a:b:c:d";
String[] result = a.split(":");  // result는 {"a", "b", "c", "d"}
•᷄ ɞ•᷅ 문자열 포매팅
문자열에서 포맷(format)을 설정하여 정해진 문자열에서 설정값을 달리하여 출력할 수 있다.
(๑❛ө❛๑ )三 숫자 바로 대입
String.format 메서드를 사용하며, "문자열" 속에서 %d(문자열 포맷 코드)를 사용하여 숫자를 대입한다.
System.out.println(String.format("I eat %d apples.", 3));  // "I eat 3 apples." 출력
(๑❛ө❛๑ )三 문자열 바로 대입
System.out.println(String.format("I eat %s apples.", "five"));  // "I eat five apples." 출력
String.format 메서드를 사용하여 "문자열" 속에서 %s(문자열 포맷 코드)를 사용하여 문자열을 대입한다.
(๑❛ө❛๑ )三 숫자 값을 나타내는 변수로 대입
int number = 3;
System.out.println(String.format("I eat %d apples.", number));  // "I eat 3 apples." 출력
String.format 메서드를 사용하여 "문자열" 속에서 %d(문자열 포맷 코드)를 사용하여 숫자 값을 나타내는 변수를 대입한다.
(๑❛ө❛๑ )三 2개 이상의 값 넣기
int number = 10;
String day = "three";
System.out.println(String.format("I ate %d apples. so I was sick for %s days.", number, day));
//I ate 10 apples. so I was sick for three days. 출력
String.format 메서드를 사용하여 "문자열" 속에서 두 개 이상의 값을 대입할 때는 파라미터를 순서대로 전달해주면 된다.
•᷄ ɞ•᷅ 문자열 포맷 코드
| 코드 | 설명 | 
| %s | 문자열(String) | 
| %c | 문자(Char) | 
| %d | 정수(Int) | 
| %f | 부동 소수 | 
| %o | 8진수 | 
| %x | 16진수 | 
| %% | % | 
%s 포맷 코드는 어떤 형태의 값이든 변환해 넣을 수 있다.
System.out.println(String.format("I have %s apples",  3));  // "I have 3 apples" 출력
System.out.println(String.format("rate is %s", 3.234));  // "rate is 3.234" 출력
%s는 자동으로 전달되는 파라미터 값을 문자열로 바꾸어 사용하기 때문에 다음과 같은 코드도 정상적으로 작동한다.
•᷄ ɞ•᷅ 포맷 코드와 숫자 함께 사용하기
(๑•̀ɞ•́๑)✧ 정렬과 공백
System.out.println(String.format("%10s", "hi"));  // "        hi" 출력
%10s는 전체 길이가 10개인 문자열 공간에서 대입되는 값을 오른쪽으로 정렬하고 그 앞의 나머지는 공백으로 남겨둔다는 의미이다.
System.out.println(String.format("%-10sjane.", "hi"));  // "hi        jane." 출력
왼쪽 정렬은 %-10s를 해주면 된다.
(๑•̀ɞ•́๑)✧ 소수점 표현하기
System.out.println(String.format("%.4f", 3.42134234));  // 3.4213 출력
소수점 네 번째 자리까지만 나타내고 싶은 경우 %.4f와 같이 '%+.+원하는 자릿수+f'를 해주면 해당하는 값을 원하는 소수점 자릿수만큼만 출력한다.
System.out.println(String.format("%10.4f", 3.42134234));  // '    3.4213' 출력
%10.4f는 전체 길이가 10개인 공간에서 대입되는 값을 오른쪽으로 정렬하고 그 앞의 나머지는 공백으로 남겨둔다는 의미이다.
•᷄ ɞ•᷅ System.out.printf
String.format 메서드는 포매팅된 문자열을 리턴함으로 이 문자열을 출력하려면 System.out.println 메서드를 함께 사용해야 한다.
System.out.println(String.format("I eat %d apples.", 3)); // "I eat 3 apples." 출력
System.out.println은 자동으로 출력 시 줄바꿈이 이루어진다.
또는 String.format을 사용하지 않고 System.out.printf를 사용하여 출력 포맷을 사용하여 출력할 수 있다.
System.out.printf("I eat %d apples.", 3);  // "I eat 3 apples." 출력
printf는 줄바꿈 문자를 포함하지 않으면 출력시 줄바꿈이 이루어지지 않는다.
String.format는 문자열을 리턴하는 메서드이고 System.out.printf는 문자열을 출력하는 메서드이므로 상황에 맞게 선택하여 사용해야 한다.
'Java > [점프 투 자바] 하루 공부 정리' 카테고리의 다른 글
| 배열(Array) (2) | 2023.02.05 | 
|---|---|
| StringBuffer (0) | 2023.02.02 | 
| 문자(char) (0) | 2023.02.01 | 
| 불(boolean) (0) | 2023.02.01 | 
| 숫자 (0) | 2023.01.29 |