package kr.s20.object.lang;
/*
* 문자열 - 명시적으로 객체
* String s = new String("하늘);
* String s3 = new String("하늘);
*메모리 안에 하늘이라는 객체가 각자 생성된다.(2개의 하늘 객체가 메모리에 들어감)
*
* 문자열 - 암시적으로 객체
* String s2 = "바다";
* String s4 = "바다";
* 메모리 안에는 바다라는 한 개의 객체를 s2와 s4가 서로 공유한다.(바다 라는 객체 1개만 존재)
*/
public class SpringMain01 {
public static void main(String[] args) {
//암시적으로 문자열 생성
//같은 문자열을 사용할 경우 객체를 공유
String str1 = "abc";
String str2 = "abc";
//객체 비교
if(str1 == str2) {
System.out.println("str1과 st2는 같은 객체"); //암시적으로 객체를 만들면 한 개 객체를 서로 공유하기 때문
}else {
System.out.println("str1과 str2는 다른 객체");
}
//문자열 비교
if(str1.equals(str2)) {
System.out.println("str1과 str2의 내용이 같다.");//객체도 같고 문자열도 같다.
}else {
System.out.println("str1과 str2의 내용이 다르다");
}
System.out.println("------------------");
//명시적으로 문자열 생성(문자열이 같아도 객체를 따로만든다)
//같은 문자열을 사용해도 객체를 따로 생성(공유X)
String str3 = new String("Hello");
String str4 = new String("Hello");//자바는 대소문자를 구분하기 때문에 hello로 쓴다면 문자열도 달라진다.
/////////////////////////////////////////////////////////////////////////////////////////////////////
//객체 비교
if(str3 == str4) { //hello라는 문자가 같은지를 비교한것이 아닌 메모리안에 있는 객체가 같은지를 확인하는 방법.
System.out.println("str3과 st4는 같은 객체");
}else {
System.out.println("str3과 str4는 다른 객체");
}
//문자열 비교
if(str3.equals(str4)) {
System.out.println("str3과 str4의 내용이 같다.");//객체는 다르지만 문자열은 같다.
}else {
System.out.println("str3과 str4의 내용이 다르다");
}
System.out.println("------------------");
String str5 = "bus";
String str6 = "BUS";
//////////////////////////////////////////////////////////////////////////////////////////////////
//대소문자 구분하지 않고 문자열 비교
//(변수.equalsIgnoreCase(비교 할 변수))
if(str5.equalsIgnoreCase(str6)) {
System.out.println("[대소문자 구분없이 비교]str5와 str6의 내용이 같다");
}else {
System.out.println("[대소문자 구분없이 비교]str5와 str6의 내용이 다르다");
}
}
}
str1과 st2는 같은 객체
str1과 str2의 내용이 같다.
------------------
str3과 str4는 다른 객체
str3과 str4의 내용이 같다.
------------------
[대소문자 구분없이 비교]str5와 str6의 내용이 같다
package kr.s20.object.lang;
public class SpringMain02 {
public static void main(String[] args) {
String s1 = "Kwon Sun Ae";
//012345678910, length(길이) = 11
int index = s1.indexOf('n'); //'n'이 위치한 인덱스를 반환하는 함수 <.indexOF(문자)>
System.out.println("맨 처음 문자 n의 위치 : " +index);
index = s1.indexOf("Sun");// 단어가 아닌 sun이라는 문자열을 넣을 시 맨 앞에 있는 S의 위치만 반환한다.
// 즉 문자열의 모든 위치는 나타내지않고 맨 앞만 나타냄.
System.out.println("문자 Sun의 위치"+index);
index = s1.lastIndexOf('n');//indexOf의 반대, indexOf는 앞에서부터 찾지만 lastIndexOf는 뒤에서부터 찾는다.
//그래서 Kwon의 n이 아닌 sun의 n을 반환한다.
System.out.println("마지막 문자 n의 위치 : "+ index);
char c = s1.charAt(index); //바로 위에서 index가 n으로 지정되어있었기 때문에 c에는 n의 위치인 7이 들어간다.
System.out.println("지정한 인덱스의 문자 추출:"+c);
index = s1.indexOf('S');
String str = s1.substring(index); //문자열 추출. index의 값부터 뒤에 값들을 반환한다. index는 S이기 때문에 S가 나오기 전까지의 문자들은 넘기고 S를 찾는다.
System.out.println("대문자 S부터 끝까지 잘라내기 : "+ str);
str = s1.substring(index,index+3);//index = 5, 즉 5와 8을 지정
System.out.println("인덱스 5부터 인덱스 8전까지 문자열 추출: " + str); //8이 출력되는 것이 아닌 8 '전'까지 출력. index위치 567이 출력
int length = s1.length();
System.out.println("문자열의 길이: "+length);
//구분자를 이용해서 문자열 잘라내기
String[] array = s1.split(" "); //split(나누려는 기준값) 문자를 잘라서 첫번째 문자는 인덱스 0번째부터 순서대로 넣는다.
for (int i =0; i<array.length; i++) {
System.out.println("array["+i+"]:"+array[i]);
}
}
}
맨 처음 문자 n의 위치 : 3
문자 Sun의 위치5
마지막 문자 n의 위치 : 7
지정한 인덱스의 문자 추출:n
대문자 S부터 끝까지 잘라내기 : Sun Ae
인덱스 5부터 인덱스 8전까지 문자열 추출: Sun
문자열의 길이: 11
array[0]:Kwon
array[1]:Sun
array[2]:Ae
package kr.s20.object.lang;
public class SpringMain03 {
public static void main(String[] args) {
String s1 = " aBa ";
String s2 = "abc";
int a = 100;
String msg = null;
msg = s1.toUpperCase(); //소문자를 대문자로 바꿔주는 함수
System.out.println("msg:"+ msg);
msg = s1.toLowerCase(); //대문자를 소문자로 바꿔주는 함수
System.out.println("msg:"+ msg);
msg = s1.replace("aB", "b"); //old 문자를 new 문자로 대체 (aB를 b로 바꾸는 함수)
System.out.println("msg:"+ msg);
msg = s1.trim(); //앞뒤에 공백 제거
System.out.println("msg :"+msg);
//문자열( aBa ) 중에 메서드의 인자로 전달된 문자열이 포합되어있는지 검증(aB가 aBa에 인자로 포함되어있기 때문에 true)
boolean f = s1.contains("aB");
System.out.println("f = " +f);
//메서드의 인자로 전달된 문자열로 시작하는지 검증
f = s2.startsWith("ab"); //abc 문자열에서 ab로 시작하는지. ab로 시작하니 true
System.out.println("f = " +f);
//메서드의 인자로 전달된 문자열로 끝나는지 검증
f = s2.endsWith("bc");//abc 문자열에서 bc로 끝나는지. bc로 끝나니 true
System.out.println("f = " +f);
//int -> String
msg = String.valueOf(a);//메서드를 이용해서 바꾸는 방법
msg = a + ""; //메서드를 이용안하고 문자열로 바꾸는 방법 <""> 빈문자열과 합치면됨
}
}
msg: ABA
msg: aba
msg: ba
msg :aBa
f = true
f = true
f = true
package kr.s20.object.lang;
import java.util.Scanner;
public class SpringMain04 {
public static void main(String[] args) {
/*
* [실습]
* 입력 받은 문자열을 한 문자씩 읽어서 역순으로 표시
*
* [입력 예시]
* 문자열: hello
*
* [출력 예시]
* olleh
*/
Scanner input = new Scanner(System.in);
System.out.print("문자열 : ");
String str = input.nextLine();
for(int i=str.length()-1; i>=0; i--) {
System.out.print(str.charAt(i));
}
/*
String num = "";
for(int i=str.length()-1; i>=0; i--) {
char c = str.charAt(i);
num += c;
}
System.out.println(num);
*/
input.close();
}
}
문자열 : hello
olleh
package kr.s20.object.lang;
import java.util.StringTokenizer;
public class SpringMain05 {
public static void main(String[] args) {
/*
* [실습}
* 아래 문자열의 대문자 -> 소문자, 소문자 -> 대문자
*/
String str = "abcMDye-4W?EWzz";
String result = "";
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i); //charAt = String으로 저장된 문자열 중에서 한 글자만 선택해서 char타입으로 변환해주는 녀석
//(i)의 괄호는 문자열에서 문자의 순서를 나타내는 것
if (ch >= 65 && ch <= 90) { // 대문자인 경우 소문자로 변환
//char -> String 소문자로 변환
result += String.valueOf(ch).toLowerCase();
} else if (ch >= 97 && ch <= 122) {
//char -> String 대문자로 변환
result += String.valueOf(ch).toUpperCase();// 소문자인 경우 대문자로 변환
} else { // 알파벳이 아닌 경우 그대로 유지
result += ch;
}
}
System.out.println(result);
System.out.println("--------------------");
String result2 = "";
// String -> char[] 로 바꿔주는 함수<.toCharArray()>
for (char c : str.toCharArray()) {
//대문자이면 true반환
if(Character.isUpperCase(c)) {
//소문자로 변환
result2 += Character.toLowerCase(c);
//소문자이면 true
}else if(Character.isLowerCase(c)) {
//대문자로 변환
result2 += Character.toUpperCase(c);
}else {
result2 +=c;
}
}
System.out.println(result2);
System.out.println("--------------------");
String result3 = "";
for (int i =0; i<str.length();i++) {
char c = str.charAt(i);
if(c >=65 && c <= 90) {//대문자
//소문자로 변환
result3 += (char)(c+32); //형변환을 해야됨 why? 그냥 하면 아스키코드 형태로 나옴.
}else if (c >= 97 && c <=122) { //소문자
//대문자로 변환
result3 +=(char)(c-32); //형변환을 해야됨
}else {
result3 += c;
}
}
System.out.println(result3);
}
}
ABCmdYE-4w?ewZZ
--------------------
ABCmdYE-4w?ewZZ
--------------------
ABCmdYE-4w?ewZZ