String
package ex1_api;
public class Ex1_String {
public static void main(String[] args) {
//자바로 만들어진 모든 프로그램은 클래스로 이루어져있다
//문자열을 저장하기 위한 String또한 저장되어있는 클래스
//String 클래스는 두 가지 특징이 있다
//1, 객체 생성방법이 두 가지(암시적, 명시적)
//2, 한번 생성된 문자열의 내용은 불변
String s1 = "abc"; //암시적 객체 생성
String s2 = "abc"; //앞에 같은 문자열로 생성된 암시적 객체가 있다면 주소를 재사용한다
String s3 = new String("abc"); //명시적 객체 생성
String s4 = new String("abc");
//== 연산자는 기본자료형을 비교할 때 값을 비교하지만 객체끼리 비교할 시 주소가 같은지 비교
if(s1==s2)
System.out.println("주소 같음");
else
System.out.println("주소 다름");
if(s1==s3)
System.out.println("주소 같음");
else
System.out.println("주소 다름");
if(s1.equals(s3)) //주소가 아닌 값을 비교
System.out.println("값이 같음");
else
System.out.println("같이 다름");
//불변의 법칙
String greet = "안녕";
greet += "하세요"; //greet는 "안녕"주소를 버리고 새로운 주소를 할당받음
System.out.println(greet);
}
}
StringBuilder
package ex1_api;
public class Ex2_StringBuilder {
public static void main(String[] args) {
//String 객체는 문자열 연산이 많은 경우 메모리를 많이 잡아먹음
//사용이 간단하고 내부 데이터를 자유롭게 공유 가능
//StringBuffer, StringBuilder
//문자열 연산으로 기존 객체 공간이 부족하게 될 경우 버퍼 크기를 늘리며 유연하게 동작
//멀티 쓰레드 환경이면 동기화 보장을 위해 StringBuffer
//싱글 쓰레드 환경이면 StringBuilder <- 문자열 연산이 많은 경우 유리
StringBuilder stringBuilder = new StringBuilder("안녕"); //객체 생성, 초기화 가능
stringBuilder.append("하세요"); //문자열을 뒤에 추가
System.out.println(stringBuilder);
stringBuilder.reverse(); //문자열 뒤집기
System.out.println(stringBuilder);
stringBuilder.insert(2, "홍길동");
System.out.println(stringBuilder);
stringBuilder.toString();
System.out.println(stringBuilder);
}
}
String Method
package ex1_api;
public class Ex3_StringMethod {
public static void main(String[] args) {
//Method란 어떤 작업을 수행하기 위한 명령문의 집합
//반복적으로 사용되는 코드를 줄이기 위해서 사용하며 필요할 때 호출하여 사용
String str = "Kim Mal Ddong";
//문자열의 길이
System.out.println("문자열 str 길이 : "+str.length());
//글자의 위치
System.out.println("문자 d의 위치 : "+str.indexOf('d'));
//인덱스 번호로 글자 찾기
System.out.println("추출한 문자 : "+str.charAt(4));
//문자열 잘라내기
System.out.println("0번부터 4번까지 잘라내기 : "+str.substring(0,5));
//문자열 분리 저장
String arr[] = str.split(" ");
for(int i=0;i<arr.length;i++)
System.out.println(arr[i]);
//숫자 형태의 문자열을 정수형으로 바꾸기
String number = "55";
int num = Integer.parseInt(number);
System.out.println(num+1);
//숫자를 문자열로 바꾸기
int n = 1;
String s1 = Integer.toString(n);
System.out.println(s1+1);
}
}
예제1
package ex1_api;
import java.util.Scanner;
public class Ex4_work {
public static void main(String[] args) {
//키보드에서 알파벳을 무작위로 입력 받고 소문자 a가 몇개 있는지 판별
Scanner sc = new Scanner(System.in);
System.out.printf("문자열을 입력해주세요 : ");
String str = sc.nextLine();
int count=0;
for(int i=0;i<str.length();i++){
if(str.charAt(i)=='a')
count++;
}
System.out.printf("a의 개수 : %d\n",count);
sc.close();
}
}
예제2
package ex1_api;
import java.util.Scanner;
public class Ex5_work {
public static void main(String[] args) {
//회문 구하기 / 회문 : 앞으로 또는 뒤로 읽어도 똑같이 읽히는 문장
//키보드에서 세글자 이상의 문장을 입력받은 뒤 해당 문장이 회문인지 회문이 아닌지 판단
Scanner sc = new Scanner(System.in);
System.out.printf("문자열을 입력해주세요 : ");
String str = sc.next();
String rev ="";
for(int i = str.length()-1;i>=0;i--) {
rev+=str.charAt(i);
}
if(str.equals(rev))
System.out.println("회문입니다.");
else
System.out.println("회문이 아닙니다.");
}
}