기본 API 클래스 03 - String 클래스

오늘·2021년 3월 25일
0

Java

목록 보기
29/42

문자열은 데어터로서 아주 많이 사용된다. 그렇기 때문에 문자열을 생성하는 방법과 추출, 비고, 찾기, 분리, 변환 등을 제공하는 메소드를 잘 익혀두어야 함.

자바의 문자열은 java.lang 패키지의 String 클래스의 인스턴스로 관리된다.

String()

바이트 배열을 문자열로 변환

byte 배열을 만들어 그 번호에 상응하는 문자로 치환
1.

public static void main(String[] args) {
	String s1 = new String();
	s1 = "홍길동 1";
	printM(s1);
	
	// 배열 생성
	byte[] bytes = {65, 66, 67, 68, 69};
	
	// bytes 배열 출력해보기
	String s2 = new String(bytes);
	printM(s2);
		
	// bytes 배열 중 0번 인덱스부터 3번 인덱스까지만 끊
	// s3변수에 넣기
	String s3 = new String(bytes, 0, 3);
	printM(s3);
}
	
// 출력만을 전담하는 메소드 생성
private static void printM(String s) {
	System.out.println(s);
}

출력 결과

홍길동 1
ABCDE
ABC
// 읽은 바이트를 저장하기 위한 배열 생성
byte[] bytes = new byte[100];
		
// 배열에 읽은 바이트를 저장하고 읽은 바이트 수를 리턴
System.out.print("입력 : ");
int readByteNo = System.in.read(bytes);
System.out.println(readByteNo);
for(int i=0; i<bytes.length; i++) {
	// 문자가 숫자로 배열에 들어가 있는 모습을 확인할 수 있다
	System.out.print(bytes[i] + " ");
}
		
System.out.println();

// 배열을 문자열로 변환
// 바이트화 되어있는 bytes 배열을
// 0번 인덱스부터 길이만큼(하지만 앞 뒤로 붙어있는 \r \n 을 제거해주기 위해 -2)
// String에 넣어주기
String str = new String(bytes, 0, readByteNo-2);
System.out.println("입력 된 것 : " + str);

실행 모습


charAt()

매개값으로 주어진 인덱스의 문자를 리턴한다.

: charAt(찾고 싶은 인덱스 번호) 로 사용
: 인덱스는 0번부터 시작한다는 점을 유의하자

String s1 = new String("static void main");
// "static void main"의 인덱스2번에 있는 알파벳을 알고 싶다
char indexChar = s1.charAt(2);
System.out.println(indexChar);

// 그냥 문자열로 사용해보기
String str = "static void main";
char indexChar1 = str.charAt(2);
System.out.println(indexChar);

실행결과

a
a

equals()

문자열 비교에 사용

기본타입(byte, char, short, int long, float, double, boolean) 변수의 값을 비교할 때는 == 연산자를 사용하지만 문자열 비교시에는 dquals를 사용한다.

String s1 = new String("static void main");
String str = "static void main";

// 인덱스 2번에 있는 a와 인덱스 13번의 a가 같은 지 확인하기
char c1 = s1.charAt(2);
char c2 = s1.charAt(13);
boolean r1 = s1.valueOf(c1).equals(s1.valueOf(c2));
System.out.println(r1);

char c3 = str.charAt(2);
char c4 = str.charAt(13);
boolean r2 = str.valueOf(c3).equals(str.valueOf(c4));
System.out.println(r2);

// 문제 c와 n이 같은 문자열인지 비교학
c1 = s1.charAt(5);
c2 = s1.charAt(15);
boolean cc = s1.valueOf(c1).equals(s1.valueOf(c2));
System.out.println(c3);

실행결과

true
true
a

getBytes()

바이트 배열로 변환

: 대표적으로 문자를 암호화하거나 네트워크로 문자열을 전송할때 사용된다.
: 두가지 방법이 있다

byte[] bytes = "문자열".getBytes();
byte[] bytes = "문자열".getBytes(Charset charset);

getBytes()는 시스템의 기본 문자셋으로 인코딩된 바이트 배열을 리턴한다.

  1. 문자열로 된 것을 byte[] 배열로 바꿔보기
byte[] changByte = s1.getBytes();
for (int i=0; i<6; i++) {
	System.out.print((char) changByte[i]);
}

실행결과

static
  1. 특정 문자셋으로 인코딩된 바이트 배열을 얻으려면 두 번째 메소드를 사용하면 된다.
String s2 = "한글을 사용해봅시다";
// 문자셋 EUC-KR : 완성형 한글
//형태로 인코딩 디코딩 하겠다는 말
byte[] eucKr = s2.getBytes("EUC-KR");
System.out.println(eucKr.length);

// 디코딩 코드
// 인코딩 코드와 디코딩 코드는 문자 셋이 동일해야 한다
// 인코딩을 EUC-KR로 했다면 디코딩도 EUC-KR로
// 인코딩을 EUC-8로 했다면 디코딩도 EUC-8로
String eucKrS = new String(eucKr, "EUC-KR");
System.out.println(eucKrS);

실행결과

19
한글을 사용해봅시다

indexOf()

매개값으로 주어진 문자열이 시작되는 인덱스를 리턴

: 만약 주어진 문자열이 포함되어있지 않으면 -1을 리턴
: if 문의 조건식에서 특정 문자열이 포함되어 있는지 여부에 따라 실행 코드를 달리할 때 자주 사용
: indexOf(찾을 문자, 시작할 인덱스) 의 모양으로도 사용 가능

String s1 = "class ads ads";

// indexOf의 리턴타입은 int
// 문자의 인덱스 번호를 찾아준다
// 동일 문자가 있다면 가장 먼저 찾은 인덱스로
int i1 = s1.indexOf("a");
System.out.println("a의 인덱스는 : " +i1);
int i2 = s1.indexOf("s");
System.out.println("s의 인덱스는 : " + i2);
// 3번째 인덱스 이후로 a를 찾겠다
int i3 = s1.indexOf("a", 3);
System.out.println("3번째 인덱스부터 a를 찾았을 때 : " + i3);
// 만약 해당 문자가 없다면 -1을 리턴
if(s1.indexOf("y") == -1) { 
	System.out.println("찾는 문자가 없음");
}

실행결과

a의 인덱스는 : 2
s의 인덱스는 : 3
3번째 인덱스부터 a를 찾았을 때 : 6
찾는 문자가 없음

length()

문자열의 길이(문자의 수)를 리턴

String s2 = " 자바 공부 하기 ";
System.out.println(s2.length());

실행 결과

10

replace()

문자열 대치

: 첫 번째 매개값인 문자열을 찾아 두 번째 매개값인 문자열로 대치한다

String s1 = "class ads ads";

// 문자 바꾸기
// ads를 bcd로 바꿔보자
// 두개가 있다면 두개 다 바뀜
String changeWord1 = s1.replaceAll("ads", "bcd");
System.out.println(changeWord1);
		
// 알파벳 e를 w로 바꿔보자
String changeWord2 = s1.replace('d', 'w');
System.out.println(changeWord2);

실행결과

class bcd bcd
class aws aws

trim()

문자열 앞 뒤 공백 잘라내기

String s2 = " 자바 공부 하기 ";
		
String ts = s2.trim();
System.out.println(ts);

실행 결과

자바 공부 하기

valueOf()

문자열 변환

기본 타입의 값을 문자열로 변환하는 기능을 가지고 있다.

public class Main {
	public static void main(String[] args) throws IOException {
		// 클래스를 문자열로 처리하기
		// 내용이 없는 빈 클래스를 넣으면 주소가 문자열이 되어 반환되고
		// 문자 리턴값이 있다면 리턴값을 출력된다
		String s3 = "123";
		String carAddress = s3.valueOf(new Car());
		System.out.println("Car클래스의 주소 : " + carAddress);
				
		// 배열의 0번 인덱스부터 3개 까지만 s3에 문자열로 넣어주겠다 
		char[] charArr = {'a', 'p', 'p', 'l', 'e'};
		String value = s3.valueOf(charArr, 0, 3);
		System.out.println(value);
	}
}

class Car{
	@Override
	public String toString() {
		return "자동차";
	}
}

실행 결과

Car클래스의 주소 : 자동차
app

0개의 댓글