#string 클래스 내 메소드 사용법
class StringMethod
{
public static void main(String[] args)
{
String str1="Smart";
String str2=" and ";
String str3="Simple";
String str4=str1.concat(str2).concat(str3);
// concat String의 주소값이 반환시키므로 .으로 연결해준것
System.out.println(str4);
System.out.println("문자열 길이: "+str4.length());
if(str1.compareTo(str3)<0)
System.out.println("str1이 앞선다");
else
System.out.println("str3이 앞선다");
}
}
String name = "홍길동“;
- “”만으로 객체를 만들 수 있다(스트링을 많이 사용하기 때문에 편리하게 사용할 수 있도록 되어 있는 것)
# 도큐먼트 보는 법
자바 사이트 → Java APIs - Java SE Documentation → JDK8 → Java SE API Documentation →
java.util → Scanner → 아래에서 클래스 찾기
import java.util.Scanner;
class SCTest
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String str = sc.nextLine(); //Hello World
System.out.println(str);
}
}
/* 결과 : Hello World 치니까
Hello World */
- .nextLine 엔터를 칠 때까지 자기의 입력값으로 받아들임
import java.util.Scanner;
class SCTest
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String str = sc.next(); //Hello World
System.out.println(str);
}
}
/* 결과 : Hello World 치니까
Hello */
.next(); 엔터키값 또는 공백까지를 키 값으로 받아들임
import java.util.Scanner;
class SCTest
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String str = sc.next(); //Hello World
System.out.println(str.length());
}
}
/* 결과 : Hello치니까
5 */
- length() : 이 문자열의 길이를 반환한다. (반환값의 자료형은 int)
Q. 임의의 문자열 두개를 입력받아 두 문자열 합치기, 대문자로 변환, 소문자로 변환시키기
A.
import java.util.Scanner;
class SCTest
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String str1 = null, str2 = null;
str1 = sc.nextLine();
str2 = sc.nextLine();
System.out.println(str1.concat(str2)); // 문자열 합치기
System.out.println(str1+str2);
System.out.println(str.toUpperCase()); // 대문자
System.out.println(str.toLowerCase()); // 소문자
}
}
- compareTo : 두 문자열을 비교하는 메소드
- c에서는 아스키코드로 char 1바이트로 표현함
A B C / a b c d
65 66 67 / 97 98 99 100
ex)
String str1="AAA";
String str2="AAA";
int r=srt1.compareTo(srt2); // 결과 : r = 0
String str1="AAA";
String str2="BBB";
int r=srt1.compareTo(srt2); // 결과 : r = -1
String str1="AAA";
String str2="CCC";
int r=srt1.compareTo(srt2); // 결과 : r = -2
String str1="CCC";
String str2="AAA";
int r=srt1.compareTo(srt2); // 결과 : r = 2
String str1="AAA";
String str2="AAC"; // 처음으로 다른 부분에서 연산이 일어남(같은 부분은 연산 안함)
int r=srt1.compareTo(srt2); // 결과 : r = -2
Q. 알파벳순으로 정렬하시오.
A.
String tmp=null;
String str1"Bill", str2"David", str3"Alice", str4"Candy";
if(str1.compareTo(str2)>0)
{
tmp=str1;
str1=str2;
str2=tmp;
}
if(str1.compareTo(str3)>0)
{
tmp=str1;
str1=str3;
str3=tmp;
}
if(str1.compareTo(str4)>0)
{
tmp=str1;
str1=str4;
str4=tmp;
}
if(str2.compareTo(str3)>0)
{
tmp=str2;
str2=str3;
str3=tmp;
}
if(str2.compareTo(str4)>0)
{
tmp=str2;
str2=str4;
str4=tmp;
}
if(str3.compareTo(str4)>0)
{
tmp=str3;
str3=str4;
str4=tmp;
}
System.out.println(str1+" "+str2+" "+str3+" "+str4);
- 한글도 이 방법 가능하다 ex) 주소록
# 메소드 체이닝(Method Chaining - 체인처럼 연결되었다 의미)
ex)
class Number
{
int num
public Number add(int num)
{
this.num+=num;
return this;
}
public void printNum()
{
System.out.println(num);
}
}
class NumberMain
{
public static void main(String[] args)
{
Number n1 = new Number();
n1.add(3). add(5). add(2). printNum(); // 문법적으로 이상없음
// 1000번지라는 주소값에 리턴 add 3+5+2 ∴10이라고 출력함
n1.add(3). add(5). printNum(). add(2). printNum();
/* 에러발생 무조건.으로 연결할 수 있는 것이 아님
.앞에 주소가 있어야 하는데 printNum()은 void를 리턴해 주소가 없으므로 불가
사용을 원하는 경우 public void printNum()에서 void를 Number로 바꾸고
return this; 추가해주는 경우 에러나지 않고 가능하다*/
}
}
ex)
(new Number()).add(5);
- 객체를 생성하고 해당 주소 생기므로 에러 발생하지 않음
단, 주소를 가지고 있는 것이 없기 때문에 주소에 접근할 수 없어 가비지 컬렉터에 언젠가 메모리 지워짐
- String의 특징 : 문자열은 변경이 되지 않는다
ex)
String str1="홍길동";
str1="임꺽정";
System.out.println(str1); // 결과 : 임꺽정
기존의 똑같은 문자열이 있으면 기존의 문자열을 가리키게 된다(메모리 과부하 방지 위함)
ex)
String str1="홍길동";
String str2="홍길동";
str1="임꺽정";
- String str2=new String(str1); 기존에 똑같은 문자열이 있더라도 새로운 인스턴스를 만듬
- “ ”와 생성자는 작동원리가 다르다
명시적으로 복사가 필요하는 상황이 아니라면 이 생성자는 필요없다고 도큐먼트에 설명되어 있음
import java.lang.*; - 자바가 자동으로 삽입시켜주기 때문에 스트링을 자동으로 사용할 수 있는 것임
ex) 공백을 포함한 문자열의 길이를 구하는 것임
class StringInstance
{
public static void main(String[] args)
{
java.lang.String str="My name is Sunny";
int strLen1=str.length();
System.out.println("길이 1: "+strLen1);
int strLen2="한글의 길이는 어떻게?".length();
System.out.println("길이 2: "+strLen2);
}
}
- “ ”하면 스트링 객체 생성 -> length로 객체 주소 반환 -> 문자열의 길이 리턴
ex)
class ImmutableString
{
public static void main(String[] args)
{
String str1="My String";
String str2="My String";
String str3="Your String";
if(str1==str2)
System.out.println("동일 인스턴스 참조"); // 결과 : 동일 인스턴스 참조
else
System.out.println("다른 인스턴스 참조");
if(str2==str3)
System.out.println("동일 인스턴스 참조");
else
System.out.println("다른 인스턴스 참조"); // 결과 : 다른 인스턴스 참조
}
}
ㄴ 자바는 주소값을 찍어볼 순 없지만 비교할 순 있음
class StringMethod
{
public static void main(String[] args)
{
String str1="Smart";
String str2=" and ";
String str3="Simple";
String str4=str1.concat(str2).concat(str3);
// concat String의 주소값이 반환시키므로 .으로 연결해준것
System.out.println(str4);
System.out.println("문자열 길이: "+str4.length());
if(str1.compareTo(str3)<0)
System.out.println("str1이 앞선다");
else
System.out.println("str3이 앞선다");
}
}
class StringCopy
{
public static void main(String[] args)
{
String str1="Lemon";
String str2="Lemon";
String str3=new String(str2);
if(str1==str2)
System.out.println("str1과 str2는 동일 인스턴스 참조");
else
System.out.println("str1과 str2는 다른 인스턴스 참조");
if(str2==str3)
System.out.println("str2와 str3는 동일 인스턴스 참조");
else
System.out.println("str2와 str3는 다른 인스턴스 참조");
}
}
ex)
class StringAdd
{
public static void main(String[] args)
{
String str1="Lemon"+"ade"; // “Lemon".concat("ade")
String str2="Lemon"+'A'; // “Lemon".concat(String.valueOf('A'));
String str3="Lemon"+3; // “Lemon".concat(String.valueOf(3));
String str4=1+"Lemon"+2; // new StringBuilder().append(1).append("Lemon").append(2).toString()
str4+='!'; // ㄴ 내부적 연산
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
System.out.println(str4);
}
}
- static valueOf : char, int를 string으로 형변환 해주는 것
ex)
class BuilderString
{
public static void main(String[] args)
{
StringBuilder strBuf=new StringBuilder("AB");
strBuf.append(25); //AB25
strBuf.append('Y').append(true); //AB25Ytrue
System.out.println(strBuf); //AB25Ytrue
strBuf.insert(2, false); //ABfalse25Ytrue
strBuf.insert(strBuf.length(), 'Z'); //ABfalse25YtrueZ
System.out.println(strBuf); //ABfalse25YtrueZ
}
}
- StringBuilder(클래스종류)는 생성자 중에 문자열을 받음
16바이트의 버퍼(메모리)를 가지고 있다
16을 넘어서면 자동으로 늘어남(부하를 일으킴)
처음부터 적절한 길이를 주고서 생성해주는 것이 좋다
- toString() : StringBuilder에서 string으로 형변환해줌
class SimpleAdder
{
private int num;
public SimpleAdder(){num=0;}
public SimpleAdder add(int num)
{
this.num+=num;
return this;
}
public void showResult()
{
System.out.println("add result: "+num);
}
}
class SelfReference
{
public static void main(String[] args)
{
SimpleAdder adder=new SimpleAdder();
adder.add(1).add(3).add(5).showResult();
}
Q. 문제 [StringBuilder의 API 문서 참조]
String str1 = "ABCDEFGHIJKLMN"; 역순으로 출력
String str2 = "990208-1012752" 이 문자열을 활용하여 중간에 삽입된 -를 삭제한 String 인스턴스를 생성.
A.
class StringTest2
{
public static void main(String[] args)
{
String str1 = "ABCDEFGHIJKLMN";
String str2 = "990208-1012752";
int idx=0;
StringBuilder sb1 = new StringBuilder(str1);
StringBuilder sb2 = new StringBuilder(str2);
System.out.println(sb1.reverse().toString());
idx = sb2.indexOf("-");
if(idx != -1)
System.out.println(sb2.deleteCharAt(idx).toString());
}
}
'SW > Java' 카테고리의 다른 글
[필기정리]Day10 - 2차원배열, 배열 예제문제 등 (0) | 2020.06.24 |
---|---|
[필기정리] Day9 - printf, 배열 등 (0) | 2020.06.22 |
[필기정리] Day8-1 - static변수, 메소드 오버로딩 등 (0) | 2020.06.21 |
[필기정리] Day7 - 클래스패스, 접근제어 지시자, 엑세스메소드 등 (0) | 2020.06.21 |
[필기정리] Day6 - 카멜케이스, 생성자 (0) | 2020.06.21 |