문자열
- 문자열 new 키워드 -> 객체를 만들 때 사용
String a = new String("Happy Java");
String b = new String("a");
String c = new String("123");
int, long, double, float, boolean, char 자료형을 원시(primitive) 자료형 -> new 키워드로 값 생성 불가, 아래와 같이 리터럴로만 값 세팅 가능
(String 은 리터럴 표기 가능이지만 primitive 아님)
boolean result = true;
char a = 'A';
int i = 100000;
- 문자열 메서드
1. equals
String a = "hello";
String b = new String("hello");
System.out.println(a.equals(b)); // true
System.out.println(a == b); // false
a와 b는 값은 같지만 서로 다른 객체, == 은 두개의 자료형이 동일한 객체인지를 판별할 때 사용하는 연산자이기 때문에 false를 리턴
2. indexof - 문자열 시작되는 위치(인덱스) 리턴
System.out.println(a.indexof("<문자열>"));
3. contains - 문자열에서 특정 문자열 포함되어있는지 여부 t/f 리턴
4. charAt - 문자열에서 특정 문자 위치의 문자(char)를 리턴
5. replaceAll - 문자열 중 특정 문자열을 다른 문자열로 바꾸고자 할 때 사용
String a = "Hello Java";
System.out.println(a.replaceAll("Java", "World")); // Hello World 출력
6. substring - 위처럼 substring(시작위치, 끝위치)와 같이 사용하면 문자열의 시작위치에서 끝위치까지의 문자를 뽑아내게 됨. 단 끝위치는 포함이 안된다는 점에 주의
7. toUpperCase - 문자열을 모두 대문자로 변경할 때 사용 (모두 소문자로 변경할때는 toLowerCase를 사용)
8. split - 문자열을 특정 구분자로 나누어 문자열 배열로 리턴
"a:b:c:d" 라는 문자열을 ":" 문자로 나누어 {"a", "b", "c", "d"} 문자열 배열을 만들수 있음
- 문자열 포맷팅
%s | 문자열 |
%c | 문자 1개(char) |
%d | 정수(int) |
%f | 부동소수(float) |
%o | 8진수 |
%x | 16진수 |
%% | literal % (문자 % 자체) |
; 정렬과 공백
%10s는 전체 길이가 10개인 문자열 공간에서 대입되는 값을 오른쪽으로 정렬하고 그 앞의 나머지는 공백으로 남겨 두라는 의미이다.
그렇다면 반대쪽인 왼쪽 정렬은 %-10s가 될 것
; System.out.printf 메서드
String.format: 문자열을 리턴하는 메서드
System.out.printf: 문자열을 출력하는 메서드
StringBuffer
- append
StringBuffer sb = new StringBuffer(); // StringBuffer 객체 sb 생성
sb.append("hello");
sb.append(" ");
sb.append("jump to java");
String result = sb.toString(); //toString() 메서드를 이용하여 String 자료형으로 변경
System.out.println(result); // "hello jump to java" 출력
// StringBuffer 대신 String 자료형을 사용하도록 변경
String result = "";
result += "hello";
result += " ";
result += "jump to java";
System.out.println(result); // "hello jump to java" 출력
첫 번째 예제의 경우 StringBuffer 객체는 한번만 생성
두 번째 예제는 String 자료형에 + 연산이 있을 때마다 새로운 String 객체가 생성 -> 총 4개 String 자료형 객체 생성
String 자료형은 한번 값이 생성되면 그 값을 변경 X StringBuffer는 이와 반대로 값을 변경 O
new StringBuffer() 로 객체를 생성하는 것은 일반 String을 사용하는 것보다 메모리 사용량도 많고 속도도 느림
따라서 문자열 추가나 변경 등의 작업이 많을 경우에는 StringBuffer 문자열 변경 작업이 거의 없는 경우에는 그냥 String 사용 권장
+StringBulider: StringBuffer 사용법과 동일, but StringBuffer는 멀티 스레드 환경에서 안전하다는 장점/ StringBuilder는 StringBuffer보다 성능이 우수한 장점따라서 동기화를 고려할 필요가 없는 상황에서는 StringBuffer 보다는 StringBuilder를 사용이 유리
- insert: insert 메서드는 특정 위치에 원하는 문자열을 삽입
- substring: StringBuffer에서도 String 자료형의 substring 메서드와 동일하게 동작,substring(시작위치, 끝위치)와 같이 사용하면 StringBuffer 객체의 시작위치에서 끝위치까지의 문자를 뽑아냄
배열
int[] odds = {1, 3, 5, 7, 9};
String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};
String[] weeks = new String[]; // 길이에 대한 숫자값이 없으므로 컴파일 오류가 발생한다.
리스트
import java.util.ArrayList;
public class Sample {
public static void main(String[] args) {
ArrayList pitches = new ArrayList();
pitches.add("138");
pitches.add("129");
pitches.add("142");
}
}
/*자바는 J2SE 5.0 버전 이후부터 ArrayList<String> pitches = new ArrayList<>(); 처럼
객체를 포함하는 자료형도 어떤 객체를 포함하는지에 대해서 명확하게 표현할 것을 권고*/
- get : 특정 인덱스의 값을 추출, System.out.println(pitches.get(1));
- size : ArrayList의 갯수를 리턴, System.out.println(pitches.size());
- contains : 리스트 안에 해당 항목이 있는지를 판별하여 그 결과를 boolean으로 리턴, System.out.println(pitches.contains("142"));
- remove
- remove(객체) : 리스트에서 객체에 해당되는 항목을 삭제하고 삭제한 결과(true, false)를 리턴
- remove(인덱스) : 인덱스의 항목을 삭제하고 삭제된 항목을 리턴
- 제네릭스
ArrayList<String> pitches = new ArrayList<String>();
ArrayList<String> pitches = new ArrayList<>(); // 선호되는 방식
ArrayList pitches = new ArrayList(); //제네릭스가 도입되기 전인 J2SE 1.4 까지 코드
/* 두 개 코드의 차이점은 ArrayList 라는 자료형 타입 바로 옆에 <String> 과 같은 문구가 있느냐 없느냐의 차이
<String> 이라는 제네릭스 표현식은 "ArrayList 안에 담을 수 있는 자료형은 String 타입 뿐이다" 라는 것을 의미
즉, 제네릭스를 이용하면 좀 더 명확한 타입체크가 가능해 짐*/
제네릭스로 자료형을 선언하기만 하면 그 이후로는 자료형에 대한 형변환 과정이 필요없음
-> 이미 컴파일러가 pitches에는 반드시 String 자료형만 추가 되어야 함을 알고 있음
=> 제네릭스를 이용하면 형변환에 의한 불필요한 코딩과 잘못된 형변환에 의한 런타임 오류를 방지할 수 있음
- arraylist 만들기
import java.util.ArrayList;
import java.util.Arrays;
public class Sample {
public static void main(String[] args) {
String[] data = {"138", "129", "142"}; // 이미 투구수 데이터 배열이 있다.
ArrayList<String> pitches = new ArrayList<>(Arrays.asList(data));
//asList 메서드를 사용하면 이미 존재하는 문자열 배열로 ArrayList를 생성
System.out.println(pitches); // [138, 129, 142] 출력
}
}
/////////////////////////
//String 배열 대신 String 자료형을 여러개 전달하여 생성하는 방법
import java.util.ArrayList;
import java.util.Arrays;
public class Sample {
public static void main(String[] args) {
ArrayList<String> pitches = new ArrayList<>(Arrays.asList("138", "129", "142"));
System.out.println(pitches);
}
}
- String.join
String.join("구분자", 리스트객체)와 같이 사용하여 리스트의 각 요소에 "구분자"를 삽입하여 하나의 문자열로 만들 수 있음
문자열 배열에도 사용가능
import java.util.ArrayList;
import java.util.Arrays;
public class Sample {
public static void main(String[] args) {
ArrayList<String> pitches = new ArrayList<>(Arrays.asList("138", "129", "142"));
String result = String.join(",", pitches);
System.out.println(result); // 138,129,142 출력
}
}
- 리스트 정렬
- 오름차순(순방향) 정렬 - Comparator.naturalOrder()
- 내림차순(역방향) 정렬 - Comparator.reverseOrder()
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
public class Sample {
public static void main(String[] args) {
ArrayList<String> pitches = new ArrayList<>(Arrays.asList("138", "129", "142"));
pitches.sort(Comparator.naturalOrder()); // 오름차순으로 정렬
System.out.println(pitches); // [129, 138, 142] 출력
}
}
map
-put : key와 value 추가
-get : key에 해당하는 value값을 얻기
-getOrDefault : null 대신 디폴트 값을 얻고 싶은 경우
-containsKey : containsKey 메서드는 맵(Map)에 해당 키(key)가 있는지를 조사하여 그 유무를 참, 거짓으로 리턴
-remove : remove 메서드는 맵(Map)의 항목을 삭제하는 메서드로 key값에 해당되는 아이템(key, value)을 삭제한 후 그 value 값을 리턴
-size : Map의 갯수를 리턴
-keySet : 맵(Map)의 모든 Key를 모아서 리턴
set(집합)
; 메서드 이용해서 각각
교집합 : intersection.retainAll(s2);
합집합 : union.addAll(s2);
차집합 : substract.removeAll(s2);
-add
-addAll : 여러 개의 값을 한꺼번에 추가할 때
-remove
- 상수집합
- 매직넘버(1과 같은 숫자 상수값, 상수로 선언하지 않은 숫자)를 사용할 때보다 코드가 명확해 진다.
- 잘못된 값을 사용함으로 인해 발생할수 있는 위험성이 사라진다.
enum CoffeeType {
AMERICANO,
ICE_AMERICANO,
CAFE_LATTE
};
/**
* countSellCoffee는 판매된 커피의 갯수를 리턴하는 메서드이다.
* @param type 커피의 종류 (CoffeType)
*/
int countSellCoffee(CoffeType type) {
... 생략 ...
}
형변환
문자열을 정수로 : int n = Integer.parseInt(num);
정수를 문자열로 : String.valueOf(정수), Integer.toString(정수) 모두 정수를 문자열로 바꾸어 리턴1. 정수 앞에 빈문자열("")을 더해 주는 것 : String num = "" + n;2. String num1=String.valueOf(n);
String num2=Integer.toString(n);
소숫점 포함된 숫자 형태의 문자열 형변환: Double.parseDouble , Float.parseFloat
정수 -> 실수 : 형변환 필요X실수 -> 정수 : 반드시 정수형으로 캐스팅 (예) int n2 = (int) d2;
실수 형태의 문자열을 정수로 변경하려고 하면 NumberFormatException이 발생하므로 주의: 실수 형태의 문자열을 숫자형으로 변경하려면 Double.parseDouble()을 사용하여 실수로 바꾼후에 사용해야 함
final: 자료형에 값을 단 한번만 설정할수 있게 강제하는 키워드, 한번 설정하면 그 값을 다시 설정할 수 없음
'언어 > [Java]' 카테고리의 다른 글
[Java] 비트 연산자, 타입변환, 문자(char)타입 (0) | 2023.07.25 |
---|---|
[Java] Stack, 백준10773, 2775 (2) | 2023.07.19 |
[안드로이드 앱] 실습7-1 배경색 변경 앱 만들기 (1) | 2023.05.18 |
[Java] 백준 2675, 1431(작성 중), hasNext() (0) | 2023.05.18 |
[Java] 백준 2562, 5597 / 확장for문(:), nosuchelement, indexOf (0) | 2023.04.12 |