2014년 7월 30일 수요일

[자바교육,자바강좌,오라클자바커뮤니티,자바 스트링 클래스, Java String,문자열]

[자바교육,자바강좌,오라클자바커뮤니티,자바 스트링 클래스, Java String,문자열]
 
자바에서 문자열을 생성 하는 두가지 방법
 
String s = “abc”
 - 자바 런타임 시스템에서 공유 문자열 풀(shared string pool)에 같은 클래스로 통합하여 관리한다.
 - 같은 문자열인 경우에 같은 객체를 객체 참조자가 공유 하도록 한다.
 
String s = new String(“abc”)

 - 공유문자열 풀이 아닌 heap 영역에 새로운 문자열 객체를 생성
 - 같은 문자열이라도 서로 다른 객체를 참조 하도록 heap 메모리 영역에 객체를 생성하고 참조자를 갖도록 한다.

String 객체는 내부적으로 자바 문자 배열을 사용한다. 하지만 그 배열은 private으로 선언되어 있으므로 직접 보거나 바꿀 수 없다. 그러므로 자바에서는 실제 배열을 사용해 자신의 길이를 알고 있으므로 String 객체에 특별한 종료 문자가 필요 없다.
문자열의 길이 확인
String s = “abc”;
Int I = s.length();
 
+연산자
문자열 통합 기능
String name = “John” + “Smith”;
String name = “John”.concat(“Smith”);
 
 
String myString  = “ONJOR”;
myString = “OJAVA”;
myString변수가 "ONJOR"을 참조하고 있다가 그 참조를 끊고 새로운 "OJAVA"를 참조해야 한다.

- 문자열 연결

    String a = “I love “;
    a += “korea”;
이것은 “I love” 문자열이 수정된것이 아니라, a 가 새로운 객체를 참조하는 것이다. 즉 새로 객체생성이며 기존의 객체가 변형 되는 것은 아니다.

- 문자열 비교
 
String a=“1234”;    String b=“12” + “34”;
if (a == b) …………
- 문자열이 같은지 비교를 위해서는 String Class의 equals() 메소드를 사용한다.(대소문자구분, 길이, 개수, 문자열이 같을경우 true)
- 대소문자를 무시하고 비교 위해서는 equalsIgnoreCase()를 사용한다.
C와 동일하게 Reference로 문자열을 Access 하므로 ==로 정확한 비교 불가

equals() : java.lang.Object에 속하는 메소드이므로 모든 자바의 패키지에서 사용이 가능하고 Overriding도 가능
boolean equalsIgnoreCase(String another)   //대소문자 미교안하고 비교한다,
int compareTo(String another)              //두문자가 같으면 0, 앞 문자가 크면 양수, 적으면 음수 리턴
boolean regionMatches(boolean ignoreCase = false, int start, String other, int ostart, int len)

[문자열 비교 예제]
 
class StringTest {
   public static void main(String[] args) {
 String s1 = "Foo";
 char[] c =  {'F', 'o', 'o'};
 String s2 = new String(c);
 System.out.println(s1 + ", " + s2);
 if (s1.equals(s2)) System.out.println("s1.equals(s2) : 같다...");
 else System.out.println("s1.equals(s2) : 다르다...");
 s1 = "Foo";
 s2 = "FOO";
 System.out.println(s1 + ", " + s2);
 if (s1.equalsIgnoreCase(s2)) System.out.println("s1.equalsIgnoreCase(s2) : 같다");
 else System.out.println("s1.equalsIgnoreCase(s2) : 다르다");
 s1 = "abc"; s2 = "abc "; System.out.println(s1 + ", " + s2);
 if (s1.compareTo(s2)>0){
    System.out.println("s1.compareTo(s2) : 양수, s1이 크다");
 }
 else if (s1.compareTo(s2)<0){
    System.out.println("s1.compareTo(s2) : 음수, s2가 크다");
 }
 else System.out.println("s1.compareTo(s2) : 0, 같다.");
 s1 = "abcdef"; System.out.println("s1 : " + s1);
 if (s1.regionMatches(true, 1, "xyBcdz", 2, 3)){
    System.out.println("s1.regionMatches(true, 1, 'xyBcdz', 2, 3) : true");
 }
 else   System.out.println("s1.regionMatches(true, 1, 'xyBcdz', 2, 3) : false");
   }
}

[결과]
 
Foo, Foo
s1.equals(s2) : 같다...
Foo, FOO
s1.equalsIgnoreCase(s2) : 같다
abc, abc
s1.compareTo(s2) : 음수, s2가 크다
s1 : abcdef
s1.regionMatches(true, 1, 'xyBcdz', 2, 3) : true


댓글 없음:

댓글 쓰기