String 클래스

자바에서 가장 많이 사용되는 데이터는 문자열
1. 같은 문자열로 초기화했을때 : String은 위치를 가리키는 참조변수로 같은 문자열의 ‘위치’을 가리킨다.
String city1 =”서울시”;
String city2 = “서울시”;
city1  →  “서울시” ←  city2

 

2. new 연산자로 객체를 생성해서 문자열을 가리켰을 경우 각각의 객체를 가리킨다.

String city1 = new String(”서울시”);
String city2 = new String(”세종시”);
city1 → “서울시”
city2 → “세종시”

 

 

문자열 비교는 equals()

 

변경 불가성(Immutable) 불변성

int타입 변수는 다른 값을 대입했을 때 변경되지만
String 문자열의 경우 원래의 문자열을 변경하면 원래의 문자열은 메모리에 그대로 유지되고, 변경된 문자열이 따로 만들어진다.
예제)
 
실행결과
a = 3
b = 5
a = 5
b = 5
name =홍길동
name = 홍길동
result = 홍길동안녕
Hello World
 

String 클래스의 유용한 메서드

  • char charAt(int index) : index에 해당되는 문자를 리턴
  • int length() : 문자열의 길이를 리턴
  • int compareTo(String str) : 두 문자열의 철자를 비교
  • String concat(String str) : 두 문자열을 결합
  • boolean equals(Object obj) : 같은 문자열인지 판별
  • int indexOf(int ch) :문자열에서 문자열의 위치(index)를 리턴
  • int lastIndexOf(int ch) : 문자열을 우측에서 검색 시 인자로 전달된 문자열의 위치를 리턴
  • String replace(char oldChar, char new Char) : 문자열에서 특정 문자(oldChar)를 다른 문자(newChar)로 대체
  • String replace(Charsequence target, Charsequence relacement) : 문자열에서 특정 문자열(target)을 다른 문자(replacement)로 대체
  • String substring(int beginIdx, endIdx) : beginIdx에서 endIdx 사이에 위치한 문자열을 잘라서 리턴
  • String toLowerCase() : 문자열을 소문자로 변환 후 리턴
  • String toUpperCase() : 문자열을 대문자로 변환 후 리턴
  • String trim() : 문자열의 앞뒤 공백을 제거한 후 리턴
 
length()
String str = “Hello world”;
System.out.println(str.length()); //11
System.out.println(”hello world”.length()); //11 → 문자열에 직접 length() 메소드를 호출할 수 있다.
 
charAt() : 문자열의 첫번째 문자의 인덱스는 0부터 시작 → 문자열 길이에 해당하는 인덱스 전달하면 예외 발생
String str = “Hello World”;
System.out.println(str.charAt(4));  //’o’
System.out.println(str.charAt(11));  //StringIndexOutOfBoundsException이 발생
 
indexOf() : 인자에 해당되는 문자열의 인덱스를 리턴, 해당하는 문자열이 없는 경우 -1리턴
String str  = “Hello World”
System.out.println(str.indexOf(”o”));  //4
System.out.println(str.indexOf(”World”)); //6
System.out.println(str.indexOf(”a”)); // -1
 
replace() : 매개값의 첫 번째 문자열을 인자의 두 번째 문자열로 대체
String str  = “Hello World”;
System.out.println(str.replace(”World”, “Java”)); // “Hello Java”
 
substring() : 문자열에서 첫 번째 인덱스부터 두 번째 인덱스 -1까지의 문자열 추출
String str = “Hello World”;
System.out.println(str.substring(2,7)); //llo W
 
String 클래스 메서드 사용해보기
 
실행 결과
11
11
o
4
6
-1
Hello World and Java!!
Hello World and Java!!
hello world
HELLO WORLD
Hello Java
llo W
true
Hello World
Hello World
 
주민번호 뒷자리 번호 ‘*’로 표시하기
 

Split() 메서드

문자열을 특정한 구분자를 기준으로 분리
split() 으로 분리하면 각각의 분리된 문자열(토큰)은 배열로 저장된다.
실행결과
사과
바나나
귤
수박
인사부
회계부
개발부
관리부
스마트TV
스마트폰
노트북
태블릿
 

getBytes() 메서드

문자열의 각각의 문자를 사용할 경우
예: 한글 문자열을 인코딩이 다른 네트워크로 전송하거나 인코딩이 다른 데이터베이스에 저장할 때
getBytes() 메서드를 이용해 문자들을 byte 타입 배열로 얻을 수 있다.
(인코딩을 지정하지 않으면 사용하는 운영체제의 인코딩이 기본으로 적용된다)
byte[] encodeBytes= "자바 프로그래밍".getBytes();
String decodeName = new String(encodeBytes, "UTF-8"); //byte 데이터를 String 객체의 매개값으로 입력해서 원래 문자열로 복원

byte[] b= "hello".getBytes();
System.out.println(b.length); //5
String decodeName2 = new String(b, 2, 3, "UTF-8"); //llo
  • 2인덱스부터 3문자를 추출, UTF-8로
 

“””연산자

jdk 8부터 생겼다. 문자열을 한꺼번에 여러 줄에 출력하는 기능
 
실행결과
안녕하세요
	"자바"프로그래밍입니다.
안녕하세요.
	"자바"
프로그래밍입니다.
 
+) String 타입 변수 str을 초기화 시
  • null로 초기화 : 메모리에 String 객체가 생성되지 않은 상태
  • “”로 초기화 : String 객체를 생성 후 길이가 0인 문자열을 가지는 객체
 

StringBuffer 

StringBuffre 문자열은 new 연산자를 이용하여 메모리에 객체를 생성한 후 사용
특징 : 기존 문자열을 수정하면 문자열이 수정(mutable)된다.
사용 : StringBuffer city1 = new StringBuffer("서울시"); 
String 클래스와 달리 기존의 문자열을 바꾸면 새로운 문자열이 생성되지 않고, 기존의 문자열만 변경된다.
append() 메서드를 이용하여 문자열 수정
 
+) 바로 문자열 변경이 가능하므로 그만큼 빠르다. → 안드로이드와 같은 메모리 자원이 부족한 모바일 환경에서 문자열을 자주 변경할 경우 많이 사용된다.
실행결과
서울시
서울시 강남구
서울시 강남구 역삼동
 

StringBuilder 클래스 

기능은 기본적으로 StringBuffer와 같다.
다른점은 StringBuffer는 멀티 스레드에 동기화 기능이 제공된다. → 그만큼 성능이 떨어진다.
StringBuilder 클래스는 동기화 기능이 제공되지 않는다.
→ 멀티 스레드 환경이 아니면 StringBuilder 클래스 타입 문자열을 사용하면 좋다.
 

System 클래스 

운영체제에서 제공하는 기능 사용
기능 필드와 메서드 설명
표준 입출력 System.in
System.out
키보드로 입력하고 콘솔(모니터)로 출력
System.err 콘솔(모니터)로 에러를 출력
환경변수 읽기 getenv() 운영체제의 설정된 환경 변수를 읽어온다
시스템 프로퍼티 읽기 getProperties() 프로그램의 환경 모드를 프로퍼티 형태로 읽어온다
현재 시각 측정 currentTimeMillis() 운영체제에서 현재 시각을 읽어온다
프로그램 실행 기능 exit() 프로그램 끝내는 기능과 가비지 컬렉터 관련 기능
보안 설정 기능 getSecurityManager() 자바 프로그램의 보안 관리자 설정 기능
기타 arraycopy() 배열을 효율적으로 복사하는 기능

 
 
 

프로그램 종료(exit)

exit() 메서드로 강제 종료시킬 수 있다.
매개변수값은 종료 상태값
  • 0이면 정상종료
  • 0이 아니면 비정상 종료
 
예제)
 
실행 결과
점수를 입력해주세요
90
점수: 90점
---
점수를 입력해주세요
120
점수를 잘못 입력했습니다.
 
 

현재 시각 출력하기(currentTimeMillis)

long time = System.currentTimeMillis();

 

currentTimeMillis() 메서드로 작업 시간 구하기
 
실행 결과
1에서 100000까지의 합: 5000050000
계산 소요 시간: 1ms
1에서 10000000까지의 합: 50000005000000
계산 소요 시간: 7ms
 

 

Class 클래스

 
자바는 클래스는 먼저 정의한 후 new 연산자를 이용해 클래스 객체(인스턴스)를 이용했다.
그러나 실행 중 메모리의 클래스 객체로부터 원래 클래스에 관한 정보를 얻어야 하는 경우가 있다.
 
  • 클래스로부터 정보 얻기
Class class1 = student.class
Class class2 = Class.forName(”sec01.ex01.Student”);
forName() 메서드로 Student 클래스로부터 정보를 얻는다.
forName()은 매개값으로 패키지명과 클래스명을 모두 입력해야한다.
 
  • 객체로부터 정보 얻기
Student s1 = new Student(”이순신”, 3);
Class class3 = s1.getClass();
클래스 객체를 가리키는 참조 변수의 getClass() 메서드를 호출하면 Class 객체를 얻을 수 있다.
 
  • getName() : 패키지명까지 포함한 클래스명을 얻는다.
  • getMethods() : 클래스에 선언된 메서드명을 배열로 얻는다.
  • getSimpleName() : 클래스명을 얻는다.
  • getPackageName() : 패키지명을 얻는다.
  • getResources() : 매개값에 지정된 리소스의 경로를 얻는다.
 

Class 클래스로 클래스 정보 얻기

forName() 메서드 사용 시 반드시 main() 메서드에 예외 처리를 해주어야 한다.
 
 
실행결과
sec01.ex07.Student
Student
sec01.ex07

sec01.ex07.Student
Student
sec01.ex07

sec01.ex07.Student
Student
sec01.ex07
 
+) Class 클래스는 자바 리플렉션에서 많이 사용된다.
+) Class 객체는 해당 클래스의 경로 정보를 가지고 있기 때문에 다른 리소스 파일(xml, 이미지, 설정 파일 등)의 경로를 쉽게 얻을 수 있다.
→ 이런 기능은 웹 애플리케이션에서 데이터베이스 연동 시 설정 파일에서 연결 정보를 읽어오거나 안드로이드의 화면에서 이미지 파일에 접근하는 경우 많이 사용된다.
 
 

+ Recent posts