문자열은 데어터로서 아주 많이 사용된다. 그렇기 때문에 문자열을 생성하는 방법과 추출, 비고, 찾기, 분리, 변환 등을 제공하는 메소드를 잘 익혀두어야 함.
자바의 문자열은 java.lang 패키지의 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(찾고 싶은 인덱스 번호)
로 사용
: 인덱스는 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
기본타입(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
: 대표적으로 문자를 암호화하거나 네트워크로 문자열을 전송할때 사용된다.
: 두가지 방법이 있다
byte[] bytes = "문자열".getBytes();
byte[] bytes = "문자열".getBytes(Charset charset);
getBytes()는 시스템의 기본 문자셋으로 인코딩된 바이트 배열을 리턴한다.
byte[] changByte = s1.getBytes();
for (int i=0; i<6; i++) {
System.out.print((char) changByte[i]);
}
실행결과
static
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 한글을 사용해봅시다
: 만약 주어진 문자열이 포함되어있지 않으면 -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 찾는 문자가 없음
String s2 = " 자바 공부 하기 ";
System.out.println(s2.length());
실행 결과
10
: 첫 번째 매개값인 문자열을 찾아 두 번째 매개값인 문자열로 대치한다
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
String s2 = " 자바 공부 하기 ";
String ts = s2.trim();
System.out.println(ts);
실행 결과
자바 공부 하기
기본 타입의 값을 문자열로 변환하는 기능을 가지고 있다.
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