-
[ch9] String 클래스의 유용한 생성자와 메서드프로그래밍 언어/JAVA 2022. 8. 2. 11:44
자바에서는 문자열을 위한 클래스를 제공한다. 그것이 바로 String인데, String 클래스는 문자열을 저장하고 이를 다루는데 필요한 메서드도 함께 제공한다. 아래 표는 String 클래스 내에 정의된 생성자와 메서드의 목록인데) 전체 목록은 아니지만 자주 사용될 만한 것들 위주로 정리해봤다.
메서드 / 설명 예제 결과 String (String s)
: 주어진 문자열 (s)를 갖는 String 인스턴스를 생성한다.String s = new String("Hello"); s = "Hello" String(char [ ] value )
: 주어진 문자열 (value)를 갖는 String 인스턴스를 생성한다.char [ ] c = {'H', 'e' , 'l' , 'l', 'o' };
String s = new String(c);s = "Hello" String(StringBuffer buf)
:StringBuffer인스턴스가 갖고 있는 문자열과 같은 내용의 String 인스턴스 생성StringBuffer sb = new StringBuffer("Hello");
String s = new String(sb);s = "Hello" char charAt(int index)
: 지정된 위치(index)에 있는 문자를 알려준다.
( index는 0부터 시작 )String s = "Hello";
String n = "0123456";
char c = s.charAt(1);
char c2 = n.charAt(1);c = 'e'
c2 = '1'int compareTo(String str)
: 문자열 (str)과 사전순서로 비교한다. 같으면 0, 사전순으로 이전이면 음수, 이후면 양수 반환int i = "aaa".compareTo("aaa");
int i2 = "aaa".compareTo("bbb");
int i3= "bbb".compareTo("aaa");i = 0
i2 = -1
i3 = 1String concat(String str)
:문자열 (str)을 뒤에 덧붙인다.String s = "Hello";
String s2 = s.concat(" World");s2 = "Hello World"; boolean contains(CharSequence s)
:지정된 문자열(s)이 포함되었는지 검사한다.String s = "abcdefg";
boolean b = s.contains("bc");b = true boolean endsWith(String suffix)
: 지정된 문자열(suffix)로 끝나는지 검사한다.String file = "Hello.txt";
boolean b = file.endsWith("txt");b = true boolean equals(Object obj)
: 매개변수로 받은 문자열(obj)과 String 인스턴스의 문자열을 비교한다. obj가 String이 아니거나 문자열이 다르면 false를 반환한다.String s = "Hello";
boolean b = s.equals("Hello");
boolean b2 = s.equals("hello");b = true
b2 = falseboolean equalsIgnoreCase(String str)
:문자열과 String 인스턴스의 대소문자 구분없이 비교한다.String s = "Hello";
boolean b = s.equalsIgnoreCase("Hello");
boolean b2 = s.equalsIgnoreCase("hello");b = true
b2 = trueint indexOf(int ch)
:주어진 문자(ch)가 문자열에 존재하는지 확인하여 위치(index)를 알려준다. 못 찾으면 -1를 반환한다. (index는 0부터 시작)String s = "Hello";
int idx1 = s.indexOf('o');
int idx2 = s.idexOf('k');idx1 = 4
idx2 = -1int indexOf(int ch, int pos)
:주어진 문자(ch)가 문자열에 존재하는지 지정된 위치(pos)부터 확인하여 위치 (index)를 알려준다. 못찾으면 -1 반환String s = "Hello";
int idx1 = s.indexOf('e',0);
int idx2 = s.indexOf('e',2);idx1 = 1
idx2 = -1int indexOf(String str)
: 주어진 문자열이 존재하는지 확인하여 그 위치(index)를 알려준다. 없으면 -1을 반환한다.String s = "ABCDEFG";
int idx = s.indexOf("CD");idx = 2 String intern()
: 문자열을 상수풀(constant pool)에 등록한다. 이미 상수풀에 같은 내용의 문자열이 있을 경우 그 문자열의 주소 값을 반환String s = new String("abc");
String s2 = new String("abc");
boolean b = (s==s2);
boolean b2 = s.equals(s2);
boolean b3 = (s.intern() == s2.intern());b = false
b2 = true
b3 = trueint lastIndexOf ( int ch)
: 지정된 문자 또는 문자코드를 문자열의 오른쪽 끝에서부터 찾아서 위치(index)를 알려준다.
(위치는 앞에서부터 센다.!)String s = "java.lang.Object";
int idx1 = s.lastIndexOf ('.');
int idx2 = s.indexOf('.');idx1 = 9
(앞에서부터기에 6이 아니라 9를 출력한다.)
idx2 = 4int lastIndexOf (String str)
: 지정된 문자열을 인스턴스의 문자열 끝에서 부터 찾아서 위치 알려준다.String s = "java.lang.java";
int idx1 = s.lastIndexOf ("java");
int idx2 = s.indexOf("java");idx1 = 10
idx2= 0int length()
:문자열의 길이를 알려준다.String s = "Hello";
int length = s.length();length = 5 String replace(char old, char nw)
: 문자열 중의 문자 (old)를 새로운 문자 (nw)로 바꾼 문자열을 반환한다.String s = "Hello";
String s1 = s.replace("H" , "C");s1 = "Cello"; String replace(charSequence old, charSequence nw)
:문자열 중의 문자열을 새로운 문자열로 모두 바꾼 문자열을 반환한다.String s = "Hellollo";
String s1 = s.replace("ll" , "LL");s1 = "HeLLoLLo" String replaceAll(Strin regex, String replacement)
: 문자열 중에서 지정된 문자열(regex)과 일치하는 것을 새로운 문자열(replacement)로 모두 변경한다.String ab = "AABBAABB";
String r = ab.replaceAll("BB","bb");r = "AAbbAAbb" String [ ] split( String regex)
:문자열을 지정된 분리자(regex)로 나누어 문자열 배열에 담아 반환한다.String animals = "dog, cat, bear";
String [ ] arr = animals.split(",");arr [ 0 ] = "dog"
arr [ 1 ] = " cat"
arr [ 2 ] = "bear"String [ ] split (String regex, int limit)
: 문자열을 지정된 분리자로 나누어 문자열 배열에 담아 반환한다. 단 문자열 전체를 지정된 수로 자른다.String animals = "dog, cat, bear";
String [ ] arr = animals.split(",",2);arr [ 0 ] = "dog"
arr [ 1 ] = " cat,bear"boolean startsWith ( String prefix)
:주어진 문자열로 시작하는지 검사한다.String s = "java.lang.Object";
boolean b = s.startsWith("java");
boolean b2 = s.startsWith("lang");b = true
b2 = falseString substring(int begin)
String substring(int begin, int end)
: 주어진 시작위치(begin) 부터 끝 위치 (end)범위에 포함된 문자열을 얻는다. 이때 시작위치의 문자는 범위에 포함되지만 끝 위치의 문자는 포함되지 않는다. (begin <= x <end)String s ="java.lang.Object";
String c = s. substring(10);
String p = s.substring(5,9);c = "Object"
p = "lang"String toLowerCase()
:String인스턴스에 저장되어 있는 모든 문자열을 소문자로 변환하여 반환한다.String s = " Hello ";
String s1 = s.toLowerCase();s1 = "hello" String toString()
:String 인스턴스에 저장되어 있는 문자열을 반환한다.String s = " Hello ";
String s1 = s.toString();s1 = "Hello" String toUpperCase()
: String 인스턴스에 저장되어 있는 모든 문자열을 대문자로 변환하여 반환한다.String s = " Hello ";
String s1 = s.toUpperCase();s1 = "HELLO" String trim()
:문자열의 왼쪽 끝과 오른쪽 끝에 있는 공백을 없앤 결과를 반환한다. 이 때 문자열 중간에 있는 공백은 제거되지 않는다.String s = " Hello World ";
String s1 = s.trim();s1 = "Hello world" static String valueOf(boolean b)
static String valueOf(char c)
static String valueOf(int i)
static String valueOf(long l)
static String valueOf(float f)
static String valueOf(double d)
static String valueOf(Object o)
:지정된 값을 문자열로 변환하여 반환한다.
참조변수의 경우, toString()을 호출한 결과를 반환한다.String b = String.valueOf(true);
String c = String.valueOf('a');
String i = String.valueOf(100);
String l = String.valueOf(100L);
String f = String.valueOf(10f);
String d = String.valueOf(10.0);
java.util.Date dd = new java.util.Date();
String date = String.valueOf(dd);b = "true"
c = "a"
i = "100"
l = "100"
f = "10.0"
d = "10.0"
date = "Wed Jan 27 21:26:29 KST 2022"Object 클래스의 메서드 - toString()
이 메서드는 인스턴스에 대한 정보를 문자열(String)로 제공할 목적으로 정의한 것이다. 인스턴스의 정보를 제공한다는 것은 대부분의 경우 인스턴스 변수에 저장된 값들을 문자열로 표현한다는 뜻이다.
Object 클래스에 정의된 toString()은 아래와 같다.
public String toString() {
return getClass().getName()+"@"+Integer.toHexString(hashCode());
}클래스를 작성할 때 toString()을 오버라이딩 하지 않는다면, 위와 같은 내용이 그대로 사용될 것이다. 즉) toString()을 호출하면 클래스이름과 16진수의 해시코드를 얻게될 것이다.
< 예제 1번 >
package ch9; class Card{ String kind; int number; Card(){ this("SPADE",1); } Card(String kind, int number){ this.kind = kind; this.number = number; } } public class Ex9_4 { public static void main(String[] args) { Card c1 = new Card(); Card c2 = new Card(); System.out.println(c1.toString()); System.out.println(c2.toString()); } }
Card 인스턴스 두 개를 생성한 다음, 각 인스턴스에 toString()을 호출한 결과를 출력했다. Card클래스에서 Object클래스로부터 상속받은 toString()을 오버라이딩하지 않았기 때문에 Card 인스턴스에 toString()을 호출하면, Object클래스의 toString()이 호출된다. !!
toString()의 오버라이딩
String 클래스의 toString()은 String인스턴스가 갖고 있는 문자열을 반환하도록 오버라이딩 되어 있고, Date 클래스의 경우, Date 인스턴스가 갖고 있는 날짜와 시간을 문자열로 변환하여 반환하도록 오버라이딩 되어 있다.
따라서 toString()은 일반적으로 인스턴스나 클래스에 대한 정보 또는 인스턴스 변수들의 값을 문자열로 변환하여 반환하도록 오버라이딩되는 것이 보통이다.
<예제 2번>
package ch9; class Card{ String kind; int number; Card(){ this("SPADE",1); } Card(String kind, int number){ this.kind = kind; this.number = number; } //@Override public String toString() { return "kind : " + kind + ", number : " + number; } } public class Ex9_4 { public static void main(String[] args) { Card c1 = new Card(); Card c2 = new Card("HEART",10); System.out.println(c1.toString()); System.out.println(c2.toString()); } }
반응형'프로그래밍 언어 > JAVA' 카테고리의 다른 글
[ch11 컬렉션 프레임웍] ArrayList, LinkedList 메서드& 추가와 삭제 (0) 2022.08.02 [ch 11 컬렉션 프레임웍] List, Set, Map 핵심 인터페이스 살펴보기 (0) 2022.08.02 [JAVA] 이클립스 디버깅 하는 법 알아보기 (0) 2022.07.29 [ch7 자바 객체] 내부 클래스(inner class)와 익명 클래스(anonymous class) (0) 2022.06.22 [ch7 자바 객체] 추상(abstract) 클래스와 인터페이스(interface) (0) 2022.06.22