JAVA Programing
2017.09.06 3일차 (String Class)
예제
공부내용
-
String Class
java.lang.String
JAVA에서 중요한 기본 API 중 하나이다. 문자열을 사용할 때 String Class 를 사용한다.-
String class 생성자
-
기본적으로 String 생성은 다음과 같다.
// 가장 많이 사용되는 방법 String str = "문자열"; // 생성자를 사용해서 사용하는 방법 String str = new String("문자열"); // 자주 사용되지는 않지만 알아두면 좋은 방법들 // 배열 전체를 String 객체로 생성 String str = new String(byte[] bytes); // 배열을 지정한 문자셋으로 디코딩 String str = new String(byte[] bytes, String charsetName); // 배열의 offset 인덱스 위치로부터 length만큼 String 객체로 생성 String str = new String(byte[] bytes, int offset, int length); // 지정한 문자셋으로 디코딩 String str = new String(byte[] bytes, int offset, int length, String charsetName); // 리터럴로 생성할 시 String str = "문자열"; String str2 = "문자열"; // new로 생성할 시 String str3 = new String("문자열"); System.out.println(str == str2); // 출력 : true System.out.println(str2 == str3); // 출력 : false; // 리터럴로 생성할 시 내부적으로 intern();이 호출되어 같은 주소값으로 생성이 된다. // new 로 생성할 시 Constant Pool에 새로이 생성되므로 주소값이 다르다.
-
-
-
charAt() : 문자 추출
/* * 특정 위치에 있는 문자 추출하는 메소드 * * String객체.charAt(특정 위치); * RETURN : char */ String str = "String test"; System.out.println(str.charAt(3)); // 출력 : i
-
equals() : 문자열 비교
/* * 문자열 내용을 비교하는 메소드 * * String객체.equals("비교할 문자열") * RETURN : boolean */ String str = "String Test"; String str2 = "String test"; System.out.println(str.equals(str2)); // 출력 : false (T ,t 가 다르기 때문에)
-
indexOf() : 문자열 찾기
/* * 위치 구하는 메소드 * 문자열을 쓸 경우 맨 앞 첫글자의 위치를 반환 * * String객체.indexOf("찾고싶은 문자열"); * RETURN : int */ String str = "String Test"; System.out.println(str.indexOf("T")); // 출력 : 7
-
length() : 문자열 길이
/* * 길이 구하는 메소드 * * String객체.length(); * RETURN : int */ String str = "String Test"; System.out.println(str.length()); // 출력 : 11
-
replace() : 문자열 대치
/* * 특정 문자를 바꾸는 메소드 * * String객체.replace(특정문자, 바꿀문자); * RETURN : String */ String str = "String Test"; System.out.println(str.replace('T', 't')); // 출력 : String test
-
substring() : 문자열 잘라내기
/* * 문자열을 자르는 메소드 * 시작번호와 끝번호를 매개변수로 넣으면 * 그 사이의 문자열을 반환한다. * * String객체.subString(시작번호); * String객체.subString(시작번호, 끝번호); * RETURN : String */ String str = "String Test"; System.out.println(str.substring(1, 3)); // 출력 : tr
-
split() : 특정 구분자로 분해하기
/* * 특정 구분자로 분해하는 메소드 * 빈 문자열로 자르게 되면 글자 하나 단위로 분해한다. * * String객체.split(구분자); * RETURN : 배열 */ String str = "String/Test"; String temp[] = str.split("/"); for(String item : temp) { System.out.println(item); } // 출력 : // String // Test String temp2[] = str.split(""); for(String item: temp2) { System.out.print(item + " "); } // 출력 : // S t r i n g / T e s t
-
trim() : 문자열 앞 뒤 공백 잘라내기
/* * 앞, 뒤 공백을 제거하는 메소드 * * String객체.trim(); * RETURN : String */ String str = " String Test "; System.out.println(str.trim()); // 출력 : String Test
-
startsWith() : 특정 문자열로 시작하는지 검사
/* * 특정 문자열로 시작되는지를 검사하는 메소드 * * String객체.startsWith(문자열); * RETURN : boolean */ String str = "String Test"; System.out.println(str.startsWith("Str")); // 출력 : true String address ="naver.com"; if(!address.startsWith("http:")) { address = "http://"+address; }
-
valueOf() : 문자열 변환
/* * 매개변수에 들어가는 타입을 String형으로 변환하는 메소드 * * String.valuOf(boolean, char, int, floot, double, int, long, Object) * RETURN : String */ System.out.println(String.valueOf(100)); // 출력 : 100 System.out.println(String.valueOf(true)); // 출력 : true System.out.println(String.valueOf(123.4)); // 출력 : 123.4 System.out.println(String.valueOf('a')); // 출력 : a
-
-
-
StringBuffer VS StringBuilder
java.lang.StringBuffer , java.lang.StringBuilder
-
String 인 경우 연산을 할 경우에 Constant Pool 에 새로 생성이 된다.
String result = "안" + "녕하" + "세요" + "! 반갑습니다."; /* * JDK 1.5 버전 이상부터는 일반적인 String 연산을 SringBulider로 컴파일러가 자동변환 해준다. * String 인 경우 연산이 발생할 때 마다 새로운 메모리 풀에 추가된다. * * Constant Pool(JDK 1.6 이하는 Perm Area, JDK 1.7 이후로는 Heap Area 으로 이동함) * =========================== * | HashCode | 값 | * =========================== * | ~~~~ | 안 | * --------------------------- * | ~~~~ | 안녕하 | * ... */
-
이러한 구조로 인해 String 연산 시 메모리 낭비가 심하므로 문자열을 붙이는 연산은 StringBuffer와 StringBuilder를 사용하는 것이 좋다.
-
StringBuffer 와 StringBuilder 사용법
/* * StringBuffer VS StringBuilder * * 속도 : StringBuilder * 차이점 : StringBuffer 는 비동기에서 안정성이 보장되지만, * StringBuilder 는 비동기에서 안정성이 보장되지 않는다. * 다중 Thread 환경에서는 StringBulider를 사용하지 않는다. */ StringBuffer buffer = new StringBuffer(); buffer.append("안"); buffer.append("녕하").append("세요"); buffer.append("반갑습니다."); System.out.println(buffer.toString()); // 출력 : 안녕하세요반갑습니다. StringBuilder builder = new StringBuilder(); builder.append("안"); builder.append("녕하").append("세요! "); builder.append("반갑습니다."); System.out.println(builder.toString()); // 출력 : 안녕하세요! 반갑습니다.
-