자바에서는 문자열 처리를 위하여 다음의 클래스를 이용합니다.
String 은 원래 참조자료형이라서 new 연산자에 의해서 객체를 생성하고 사용해야 하지만
기본자료형처럼 사용할 수도 있어요.
charAt(인덱스) -문자열 데이터에 인덱스 자리에 있는 글자 하나를 반환합니다.
인덱스는 0번째부터 시작합니다.
공백도 하나의 문자로 처리합니다.
package exam01;
/*
charAt(인덱스) -문자열데이터에 인덱스 자리에 있는 글자 하나를 반환합니다.
* 인덱스는 0번째부터 시작합니다.
* 공백도 하나의 문자로 처리합니다.
*/
public class Test02 {
public static void main(String[] args) {
String data=new String("hello java");
char a = data.charAt(0);
char b = data.charAt(4);
char c = data.charAt(5); // 빈칸도,공백도 하나의 문자로 처리
char d = data.charAt(6);
System.out.println("l"+a+"l"); //1h1
System.out.println("l"+b+"l"); //1o1
System.out.println("l"+c+"l"); //1 1
System.out.println("l"+d+"l"); //1j1
}
}
매개변수 따로 필요하지않고 문자열의 길이를 반환하는 메소드.
공백도 문자 길이에 포함됩니다.
package exam01;
/*int length()
* 공백도 글자 길이에 포함됩니다.
*/
public class StringLengthTest {
public static void main(String[] args) {
String data=new String("Hello Korea "); //12
int n = data.length();
System.out.println(n);
}
}
문자열의 앞과 뒤에 있는 공백을 제거한 새로운 문자열을 반환하는 메소드.
String 원본 data가 바뀌지 않음. 새로운 문자열 만들어서 새로운 객체 만드는 것.
package exam01;
/*
String trim()
-문자열의 앞과 뒤에 있는 공백을 제거한 새로운 문자열을 반환합니다.
String = 변하지 않는 문자열.
*/
public class TrimTest {
public static void main(String[] args) {
String data= new String(" Hello java ");
String data2=data.trim();
//data는 변하지 않음. 새로운 문자열 만들고 data2에 담았다는 뜻.
//String 은 변하지 않는 문자열. 원래꺼가 바뀌는게 아니라 새로운 객체를 만드는 것.
int n2=data2.length();
System.out.println(n2); //10
System.out.println("|"+data2+"|"); //
int n = data.length();
System.out.println(n); //16
System.out.println("|"+data+"|");
}
}
모두 대문자/ 모두 소문자
package exam01;
public class UpperLowerTest {
public static void main(String[] args) {
String data= new String("Hello java");
String data1=data.toLowerCase(); //모두 소문자
String data2=data.toUpperCase(); //모두 대문자
System.out.println(data);
System.out.println(data1);
System.out.println(data2);
}
}
두 개의 문자열이 서로 같은 문자열, 같은 데이터를 갖고 있는지 판별하기 위해서 확인.
(==은 같은 메모리를 갖고 있니?)
//boolean equals(object)
//문자열이 같으면 true 그렇지 않으면 false 를 반환합니다.
//참조 변수라서 ’==’ 연산자를 문자열 변수에 사용하면 같은 메모리를 바라보고 있니?
//같은 객체를 참조하고 있는지 판별합니다. 따라서 다름.
//따라서, 같은 문자열 데이터를 갖고있는지 판별하려면 equals메소드를 사용해야함.
package exam01;
//boolean equals(object)
//문자열이 같으면 true 그렇지 않으면 false 를 반환합니다.
//참조변수라서 == 연산자를 문자열 변수에 사용하면 같은 메모리를 바라보고 있니?
//같은 객체를 참조하고 있는지 판별합니다. 따라서 다름.
//따라서, 같은 문자열 데이터를 갖고있는지 판별하려면 equals메소드를 사용해야함.
public class Equals {
public static void main(String[] args) {
String data1 = new String("hello");
String data2 = new String("hello");
if (data1.equals(data2)) {
System.out.println("같다");
}else {
System.out.println("다르다");
}
// if (data1==data2) {
// System.out.println("같다");
// }else {
// System.out.println("다르다");
// }
}
}
종합 연습 trim, toLowerCase, equals
package exam01;
public class Test04 {
public static void main(String[] args) {
String []data= {"kim","tiger","Tiger"," tiger","lee","TIGER "};
//문자열 배열 안에 타이거가 모두 몇명이 있는지 파악하는 프로그램
int cnt = 0;
for(String name:data) {
if(name.trim().toLowerCase().equals("tiger")) {
cnt++;
}
}
System.out.println(cnt);
}
}
대소문자 구분 없이 판별(띄어쓰기 차이는 무시 안하고 비교)
package exam01;
public class Test05 {
public static void main(String[] args) {
String []data= {"kim","tiger","Tiger"," tiger","lee","TIGER "};
//문자열 배열 안에 타이거가 모두 몇명이 있는지 파악하는 프로그램
int cnt = 0;
for(String name:data) {
if(name.trim().equalsIgnoreCase("tiger")) {
cnt++;
}
}
System.out.println(cnt);
}
}
package exam01;
import java.util.Scanner;
/*
* 암호와 암호확인을 입력받아 서로 같은지 판별하고 또 암호의 길이가 6자 이상인지 판별하는 프로그램을 작성
* if 합쳐서 한번에 확인
*/
public class Test08 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String pwd;
String chkPwd;
System.out.println("암호를 입력하세요 : ");
pwd = sc.next();
System.out.println("암호 확인을 입력하세요 : ");
chkPwd = sc.next();
int n = chkPwd.length(); //String 길이 확인
if(pwd.length()<6 || !pwd.equals(chkPwd)) {
System.out.println("암호가 잘못되었습니다. 암호를 확인해주세요.");
return;
}
System.out.println("올바른 암호입니다.");
System.out.println("암호"+pwd);
}
}
package exam01;
import java.util.Scanner;
public class Test09 {
/*
* 문자열 데이터를 매개변수로 전달받아 그 문자열 안에 숫자가 있는지 판별하여
* boolean 을 반환하는 메소드를 정의
*/
public static boolean isContainDigit(String data) {
boolean flag=false;
for(int i=0;i<data.length();i++) {
char ch=data.charAt(i);
if(ch>='0' && ch<='9') {//하나의 문자는 작은따옴표
flag = true;
break;
}
}
return flag;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String data;
System.out.println("문자열을 입력하세요.");
data = sc.next();
if(isContainDigit(data)) {
System.out.println("숫자를 포함하고 있어요");
}else {
System.out.println("숫자를 포함하고 있지 않습니다.");
}
}
}
package exam01;
import java.util.Scanner;
/*
* 문자열 데이터를 매개변수로 전달 받아 그 문자열 안에 특수문자가 있는지 판별
* (!@#$%^&*(),.)를 포함하고 있는지 판별하는 메소드를 만들고
* 테스트 해보기.
*/
public class Test10 {
public static boolean isContainSpecial(String data) {
char []sp= {'!','@','#','$','%','^','&','*','(',')',',','.'};
boolean flag = false;
for (int i=0;i<data.length();i++) {
char ch = data.charAt(i);
for(int j =0;j<sp.length;j++) {
if(ch==sp[j]){
return true;
}
}
}
return flag;
}
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
String data;
System.out.println("문자열을 입력하세요 : ");
data = sc.next();
if(isContainSpecial(data)) {
System.out.println("특수문자 포함"+data);
}else {
System.out.println("특수문자 미포함"+data);
}
}
}
package exam01;
import java.util.Scanner;
/*
* 사용자한테 암호와 암호확인을 입력받아 6자 이상이고, 암호확인이 동일하고, 숫자, 특수문자를 포함하는지 판별 프로그램
*/
public class Test11 {
public static boolean isContainDigit(String data) { //숫자 있나 판단.
boolean flag=false;
for(int i=0;i<data.length();i++) {
char ch=data.charAt(i);
if(ch>='0' && ch<='9') {//하나의 문자는 작은따옴표
flag = true;
break;
}
}
return flag;
}
public static boolean isContainSpecial(String data) { //특수문자 있나 판단
char []sp= {'!','@','#','$','%','^','&','*','(',')',',','.'};
boolean flag = false;
for (int i=0;i<data.length();i++) {
char ch = data.charAt(i);
for(int j =0;j<sp.length;j++) {
if(ch==sp[j]){
return true;
}
}
}
return flag;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String pwd, chkPwd;
System.out.println("암호를 입력하세요 : ");
pwd = sc.next();
System.out.println("암호 확인을 입력하세요 : ");
chkPwd = sc.next();
if(pwd.length()>=6 && pwd.equals(chkPwd)&&isContainDigit(pwd)&&isContainSpecial(pwd)) {
System.out.println("올바른 암호");
}else {
System.out.println("올바르지 않은 암호");
}
/* //int n = chkPwd.length(); //String 길이 확인
if(pwd.length()<6 || !pwd.equals(chkPwd)) { //6자리 이상, 같은지판단
System.out.println("암호가 잘못되었습니다. 암호를 확인해주세요.");
return;
}
if(!isContainSpecial(pwd)||!isContainDigit(pwd)) { //특수문자 있는지
System.out.println("암호가 잘못되었습니다. 암호를 확인해주세요.");
return;
}
System.out.println("올바른 암호입니다.");
System.out.println("암호"+pwd);
*/
}
}
문자를 넣으면 index 를 반환. 글자의 위치를 찾기.
활용 - 위치를 찾는 용도+문자열 데이터 안에 특정 문자를 포함하고 있는가 판별
문자열은 큰따옴표, 문자 하나는 작은따옴표
찾기를 끝에서부터 찾는다.
package exam01;
public class IndexOfTest {
public static void main(String[] args) {
String data= "Hello Korea java";
int n = data.indexOf('e');
int n2 = data.indexOf("e");
//e가 맨처음 나오는 위치를 알려줘.
System.out.println(n);
System.out.println(n2);
System.out.println("--------------------");
int n3=data.lastIndexOf('e');
int n4=data.lastIndexOf("e");
//찾기를 끝에서부터 찾는다.
System.out.println(n3);
System.out.println(n4);
System.out.println("--------------------");
int n5=data.indexOf("Korea");
System.out.println(n5);
int n6=data.indexOf("kim");
System.out.println(n6);
}
}
package exam01;
/*
* 입력한 문장에 hello 를 포함하고 있는지 판별
*/
import java.util.Scanner;
public class IndexOfTest02 {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
String data;
System.out.println("문장을 입력하세요 :");
data = sc.nextLine(); //넥스트 라인 문장,공백 입력받기 가능
System.out.println(data);
if(data.indexOf("hello")!=-1) {
System.out.println("hello 포함");
}else {
System.out.println("hello 미포함");
}
// int n=data.indexOf("hello");
// System.out.println(n);
}
}
/ **substring**(int beginIndex, int endIndex)`비긴인덱스 글자 자리 데이터는 포함
엔드인덱스 글자 자리 데이터는 포함 안하고 그 앞에까지만 포함
package exam01;
public class SubStringTest {
public static void main(String[] args) {
String data=new String("hello java");
String data1=data.substring(3, 7);
System.out.println(data1);
String data2=data.substring(3);
System.out.println(data2);
}
}
package exam01;
import java.util.Date;
import java.util.Scanner;
/*
* 주민번호 입력받아 나이를 구하여 출력
*/
public class SubStringTest04 {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
String jumin;
System.out.println("주민번호(하이픈 포함)를 입력하세요.");
jumin=sc.next();
int yy=Integer.parseInt(jumin.substring(0, 2));
//800101-1234567
int gender=Integer.parseInt(jumin.substring(7, 8));
if(gender==1||gender==2) {
yy+=1900;
}else {
yy+=2000;
}
Date today=new Date();
int thisYear=today.getYear()+1900; //겟이어보다 다른거 쓰는거 좋겠다고 선그어짐.
int age=thisYear-yy+1;
System.out.println("주민번호"+jumin);
System.out.println("출생연도"+yy);
System.out.println("올해연도"+thisYear);
System.out.println("나이"+age);
}
}
String 숫자를 int 숫자로 바꿈.
원래 문자 변동 없고 바뀌어진 새로운 문자 반환
package exam01;
public class ReplaceTest {
public static void main(String[] args) {
String data=new String("hello java hello Korea");
String data2=data.replace("hello", "hi");
System.out.println(data);
System.out.println(data2);
}
}
문자열을 특정 단어나 글자로 분리해주는 역할
split 메소드는 문자열을 지정된 구분자(delimiter)를 기준으로 나누어 배열로 반환합니다.package exam01;
public class SplitTest {
public static void main(String[] args) {
String data="홍길동,이순신,유관순,김유신";
String []arr=data.split(",");
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
}
}
기본 자료형을 String으로 만들고 싶을 때 사용
package exam01;
public class ValueOfTest {
public static void pro(String data) {
System.out.println("처리완료 : "+data);
}
public static void main(String[] args) {
int age =20;
boolean flag=true;
double height=178.9;
pro(age+"");
pro(flag+"");
pro(height+"");
//실제로는 이걸 더 많이 씀
//윈칙은 아래
// pro(String.valueOf(age));
// pro(String.valueOf(flag));
// pro(String.valueOf(height));
}
}
특정 문자로 시작하는가?
특정 문자로 끝나는가?