본문 바로가기

자바/클래스

string 클래스

예제1)


/*

 * String : 문자열을 처리하는 클래스

 * -final 클래스로 하위 클래스를 가질 수 없다.

 * -불변의 원칙

 */


public class Test1 {

public static void main(String[] args){

// int a=10; //스텍메모리영역에 저장

String s1="seoul";         // 문자열은 힙메모리영역에 저장 주소를 갖지 값을 갖지 않는다

String s2="seoul";         // 기존(11번줄) soeul의 주소를 가져온다. 결과적으로 seoul 주소 위치는 똑같다.

String s3=new String("seoul"); // new로 인해 새로운 주소를 할당 받는다11번과 12번의 seoul의 주소와는 다르다

System.out.println(s1==s2);          // 주소를 비교. 주소 똑같음

System.out.println(s1==s3);          // 주소 다름

// 해쉬코드:VM이 객체를 검색할 때사용

// 객체가 같으면 해쉬코드가 같지만

// 해쉬코드가 같다고 같은 객체는 아님

System.out.println(s1.hashCode());  // 해쉬코드 : VM이 갖는 고유한 값

System.out.println(s2.hashCode());

System.out.println(s3.hashCode());

s1="seoul korea";

//문자열은 불변의 원칙으로 변경이 불가능하고 다른 영역에 메모리를 다시 확보함.

System.out.println(s1==s2); //주소를 비교 : false ,==은 주소를 비교.

System.out.println(s2==s3); //주소를 비교 : false

//주소가 아닌 내용을 비교

System.out.println(s2.equals(s3)); // true 값을 비교.

System.out.println(s1.hashCode());

System.out.println(s2.hashCode());

System.out.println(s3.hashCode());

}

}


예제1 결과)

true
false
109324212
109324212
109324212
false
false
true
-1793088194
109324212
109324212

==================================================================================================================================

예제2)

public class Test2 {
public static void main(String[] args){
String s;
StringBuffer sb=new StringBuffer(); // 스트링버퍼 쓸 때는 이렇게 쓴다.
//String 클래스는 문자열을 결합하는 것이 아니라
// 불변의 원칙으로 문자열을 + 할때 마다
// 다시 메모리할당을 해서 저장하며
// 이전 것은 가비지컬렉터의 대상이 된다.
s="a";   
s+="b"; // 기존 a에 b를 붙이지 않고 전혀 새로운곳에 ab 메모리 할당. a는 가비컬렉터의 대상.
s+="c"; // 14번줄도 13번과 같은 과정을 거친다.
// StringBuffer 클래스는 문자열을 결합할 때 다시
// 다시 메모리 할당을 받는 것이 아니라 기존 문자열에
// 문자열을 결합한다. 따라서 가변문자열을 처리할 때는
// StringBuffer가 String 보다 메모리도 적게 차지하고
// 속도도 빠르다.
sb.append("a"); //12~14보다 21~23과정이 더 빠르다는 이야기. sb=스트링버퍼 append는 스트링버퍼의 문자열을 합칠때쓰는 것.
sb.append("b");
sb.append("c");
System.out.println(s); 
System.out.println(sb);
System.out.println(sb.toString());
}
}

예제2 결과)

abc
abc
abc

==================================================================================================================================

예제3)

package com.test0515;

public class Test3 {
public static void main(String[] args){
Test3 oo=new Test3();
oo.stringTest();
oo.stringBufferTest();
}
public void stringTest(){
Runtime rt=Runtime.getRuntime();
System.out.println("String............");
System.out.println("실행전 남은 메모리 : " + 
rt.freeMemory()+"/"+rt.totalMemory());
long start=System.currentTimeMillis();
String s="a";
for(int i=0; i<50000; i++)
s+="a";
long end=System.currentTimeMillis();
System.out.println("실행시간:"+(end-start)+"ms");
System.out.println("실행 후 남은 메모리 : "+ rt.freeMemory()+"/"+rt.totalMemory());
}
public void stringBufferTest(){
Runtime rt=Runtime.getRuntime();
System.out.println("StringBuffer............");
System.out.println("실행전 남은 메모리 : " + 
rt.freeMemory()+"/"+rt.totalMemory());
long start=System.currentTimeMillis();
StringBuffer s=new StringBuffer("a");
for(int i=0; i<50000; i++)
s.append("a"); //16번 줄과 동일. 스트링버퍼에서 +=과같은게 append
long end=System.currentTimeMillis();
System.out.println("실행시간:"+(end-start)+"ms");
System.out.println("실행 후 남은 메모리 : "+ rt.freeMemory()+"/"+rt.totalMemory());
}
}

예제3 결과)

String............
실행전 남은 메모리 : 15617616/16252928
실행시간:2219ms
실행 후 남은 메모리 : 11349408/16252928
StringBuffer............
실행전 남은 메모리 : 11349408/16252928
실행시간:31ms
실행 후 남은 메모리 : 15577096/16252928

==================================================================================================================================

예제4)

package com.test0515;

public class Test4 {
public static void main(String[] args) {
String s="seoul korea";  //s가0 k가 6(인덱스 순서)
String ss;
// substring : 문자열에서 특정한 문자만 추출하려 할 떄 사용. 
System.out.println(s);
ss=s.substring(6,9); // 6번째위치에서 (9-1)번째까지
System.out.println(ss);
ss=s.substring(6); // 6번째위치에서 끝까지
System.out.println(ss);
System.out.println("길이:"+s.length());
System.out.println("kor의 위치 : " + s.indexOf("kor"));  //k의 위치
System.out.println("3번째 위치부터 o는" +s.indexOf("o",3));
System.out.println("6번째문자는?"+ s.charAt(6));
System.out.println("seo로 시작하는지 ?" + s.startsWith("seo"));
System.out.println("rea로 끝나는 ?" + s.endsWith("rea"));
System.out.println("뒤부터 o의 위치는 ?" + s.lastIndexOf("o"));
//s변수 문자열과 seoul corea를 사전식 배열
// 문자열의 ==은 주소를 비교
// 문자열의 >,<,>=...로 비교하면 안됨
System.out.println(s.compareTo("seoul corea")); // ascii코드의 차이(k와 c 차이)
s="seoul";
System.out.println(s.equals("seoul"));
System.out.println(s.equals("SEOUL"));
System.out.println(s.equalsIgnoreCase("SEOUL")); //대소문자를 구분하지 않는다. true
s="우리나라 대한민국 대한독립 만세";
ss=s.replaceAll("대한", "大韓"); //문자를 치환할 때. replaceAll
System.out.println(ss);
s="     사     랑     ";
System.out.println(":" + s + ":");//:     사     랑     :
ss=s.trim();
System.out.println(":"+ss+":"); // :사     랑:
ss=s.replaceAll(" ","");
System.out.println(ss);
s="사람,믿음,소망,자바";
String [] aa=s.split(","); //문자 분류할때 split
if(aa!=null){
System.out.println(aa.length);
for(String t:aa)
System.out.println(t);
}
int n=50;
// s=""+n; 
s=Integer.toString(n);
System.out.println(s);
s=Integer.toBinaryString(n); 
System.out.println(s); 
String st;
// System.out.println(st.length())); //컴파일 오류
st=null; // 메모리 할당 안된상태
//System.out.println(st.length()); //런타임 오류. 메모리 할당 안됨
/*
if(st.length()==0||st==null)
System.out.println("없다.."); //런타임 에러. 렝스 비교 안됨
*/
if(st==null || st.length()==0)
System.out.println("없다..");// 에러아님 st==null에서 넘어가기 때문에.
st="";
System.out.println(st.length());

}
}

예제4 결과)

seoul korea
kor
korea
길이:11
kor의 위치 : 6
3번째 위치부터 o는7
6번째문자는?k
seo로 시작하는지 ?true
rea로 끝나는 ?true
뒤부터 o의 위치는 ?7
8
true
false
true
우리나라 大韓민국 大韓독립 만세
:     사     랑     :
:사     랑:
사랑
4
사람
믿음
소망
자바
50
110010
없다..
0

==================================================================================================================================

예제5) 

package com.test0515;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test5 {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String str;
System.out.println("수식 ? ");
str=br.readLine();
str=str.replaceAll(" ",""); //공백제거
for(String s:new String[]{"+","-","*","/"}){
int pos=str.indexOf(s); // 존재하지 않으면 -1 // 변수s의 위치
if(pos>0){
int num1=Integer.parseInt(str.substring(0,pos));  // 사칙연산 전까지 숫자를 잡는다
int num2=Integer.parseInt(str.substring(pos+1));  // 사칙연인 이후의 숫자를 잡는다.
char ch = str.charAt(pos);
switch(ch){
case'+':System.out.println(str+"="+(num1+num2));
break;
case'-':System.out.println(str+"="+(num1-num2));
break;
case'*':System.out.println(str+"="+(num1*num2));
break;
case'/':System.out.println(str+"="+(num1/num2));
break;
}
break;
}
}
}
}

예제5 결과)

수식 ? 
100/10
100/10=10

==================================================================================================================================

예제6)

 package com.test0515;

import java.util.Arrays;


public class Test6 {
public static void main(String[] args) {
String[] ss={"서울","부산","대구","광주","대전","인천","울산","세종"};
Arrays.sort(ss); //간단하게 정렬하는 방법
boolean flag;
int count=0;
String temp;
//문자열비교
// 같은지 비교 : equals()
//  > < ..: compareTo()
do{
flag=false;
count++;
for(int i=0; i<ss.length-count; i++){
if(ss[i].compareTo(ss[i+1]) > 0) {
temp=ss[i];
ss[i]=ss[i+1];
ss[i+1]=temp;
flag=true; //소트(정렬)가 안된상태
}
}
}while(flag);
for(String s:ss)
System.out.print(s+"   ");
System.out.println();
}
}

예제6 결과)

광주   대구   대전   부산   서울   세종   울산   인천   


'자바 > 클래스' 카테고리의 다른 글

Scanner 클래스  (0) 2013.05.19
SimpleDateFormat  (0) 2013.05.19
Wrapper 클래스  (0) 2013.05.19
BigDecimal와 BigInteger  (0) 2013.05.19
StringBuffer 클래스  (0) 2013.05.15