2013년 11월 26일 화요일

JAVA문자열처리, 자바문자열이란. 자바 스트링 클래스, Java String,문자열,자바에서문자열다루는법 자바에서 문자열을 생성 하는 두가지 방법

JAVA문자열처리, 자바문자열이란. 자바 스트링 클래스, 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

댓글 없음:

댓글 쓰기