String클래스
new라는 연산자를 통해 객체를 생성해야하지만 생략가능
String은 문자열 개체이다.
아래의 n1은 "hello"문자열을 가지고 있는 도구이다.
n1을 통해 String클래스가 가지고있는 도구들을 사용할 수있다.
String n = new String("hello"); //String클래스 객체를만든것, 문자를 조작할수있는 기능들을갖고있다.
String n1 = "hello"; //객체화됨, 문자열을 담고있는도구 /
객체 n1을 통해 indexOf(),substring(),length,toUpperCase(),compareTo 등 메소드들을 사용 할 수있다.
문자열비교
String n1 = "홍길동";
String n2 = "홍길동";
String n3 = new String("홍길동");
String n4 = new String("홍길동"); //객체비교
System.out.println(n1 == n2); //참 new연산자
System.out.println(n1.equals(n2)); //참 *자주사용함
System.out.println(n3 == n4); //거짓
System.out.println(n3.equals(n4)); //참
n1과 n2는 new를 이용해서 객체를 생성하지 않으면 컴파일러가 해준다. 같은 문자열을 갖고있으면 같은곳에 위치한다.(같은객체참조)
n1==n2비교하면 객체비교,(주소값 비교)이며, 참이라고 나온다.
n1.equals(n2)는 대상의 내용자체를 비교한다. 결과는 참이다.
n3 == n4 는 각각 다른 주소값을 갖으므로 거짓이 나온다.
n3.equals(n4)는 같은 내용을 갖고있으므로 참이 나온다.
equals참조
length()
String fileName = "photo.jpg";
String test = fileName.substring(3);//to.jpg
System.out.println(test.length());//6
fileName.substring(3) : fileName의 인덱스3부터 끝까지 문자열을 반환한다.
test.length() : test의 문자열 길이를 반환한다.
indexOf() / substring()
String fileName = "photo.jpg";
System.out.println(fileName.length()); // 9
System.out.println(fileName.indexOf(".")); //"."가 포함되었는지? 5
System.out.println(fileName.indexOf(".",6));
//-1 "."가 6번째부터 포함되어있는지?없다면-1
System.out.println(fileName.substring(3)); //to.jpg
System.out.println(fileName.substring(3,2)); // 에러
System.out.println(fileName.substring(3,5)); // 인덱스3~4까지 to
fileName.length() : fileName의 문자열 갯수. 총 9개를 반환한다.
fileName.indexOf(".") : fileName의 문자열 중 "."위치를 찾아준다. "."의 위치 5가 반환된다.
fileName.indexOf(".",5) : fileName의 문자열 중 "."를 인덱스6부터 찾는다.없다면 -1반환한다.
fileName.substring(3,5) : fileName의 인덱스3부터 인덱스4까지 반환
String.substring(start,end)
String fileName = "photo.jpg";
//위의 파일명에서 .이있는곳까지의 문자열을 출력(단.제외)
int pos = fileName.indexOf(".");//위치파악
System.out.println(fileName.substring(0,pos)); //photo
System.out.println(fileName.substring(pos)); //.jpg
String.substring(start,end): start부터 end전까지 문자열출력
fileName.indexOf(".") : fileName의 특정문자열위치(숫자로 반환)를 갖고있는 객체생성.
fileName.substring(0,pos) : 0부터 pos전까지 문자열출력
fileName.substring(pos) : pos부터 끝까지 문자열출력
String.compareTo()
int a = fileName.indexOf(".");//위치파악
System.out.println(fileName.compareTo("aphoto.jpg")); // 15 결과가0 보다크다면 앞이크다
System.out.println(fileName.compareTo("photo.jpg")); // 0 문자열 같을때 0을 반환
System.out.println(fileName.compareTo("qphoto.jpg")); // -1
System.out.println(fileName.compareTo("rphoto.jpg") > 0); // -2 0보다작으면 괄호
String.compareTo("A") : String의 문자열과 "A"문자열의 순서를 비교
첫번째글자가 같으면 다음 두번째글자를 비교한다.
String의 문자열이 사전편찬순서상 뒤에있다면 0보다큰 양수 값이 반환된다.(a,b,c,d,...,z순서)
fileName > "aphoto.jpg" 보다 크다면 15가 반환(f가 a보다 순서가 뒤에있으므로 f가 크다)
fileName과 "aphoto.jpg"의 알파벳순서가 같다면 0이 반환
String.compare("A")결과 값이 0이라면 String값이 "A"값보다 더 크다.(조건문의 조건으로사용가능)
fileName > ("aphoto.jpg") 0 보다 크면 fileName이 크다. 음수이면 "aphoto.jpg"이크다.
문자열배열의 인덱스섞기
String[] names = new String[] {"강호동","유재석","하하","김지호","김현준","김태희","박민정"};
Random rand = new Random();
for(int i=0; i<100;i++) {
int idx1 = rand.nextInt(7); //0~6
int idx2 = rand.nextInt(7); //0~6
// System.out.printf("idx1 :%d, idx2:%d\n",idx1,idx2); //랜덤값을 확인한다.
String temp; //데이터형이달라져도 똑같다.
temp = names[idx1]; //랜덤값끼리 섞어준다
names[idx1] = names[idx2];
names[idx2] = temp;
}
배열 인덱스 섞기는 자료형이 달라져도 방식은 똑같다.
배열의 인덱스 숫자만큼 랜덤숫자를뽑는다.
임시변수만 String타입으로 선언해준다.
문자열비교 String.compareTo("A")
for(int j=0;j<7-1;j++)
for(int i=0;i<7-1-j;i++)
if(names[i].compareTo(names[i+1]) > 0){
String temp;
temp = names[i];
names[i] = names[i+1];
names[i+1] = temp;
}
String.compareTo()메소드를 통해 두 문자열을 비교할 수있다.
b.compareTo(a) > 0 이라면 b가 a보다 크다. 둘의 위치를 바꾸면 사전편찬순으로 정렬된다.
총7개의 인덱스를 6번반복하면 가장 마지막 문자열 1개가 나오고(작은for문) 이 반복을 6번반복하면 전체정렬이된다.
String클래스를 통해 만들어진 객체.하면 String클래스에 포함된 메소드들이 뜬다.
package ex3.array.test2;
import java.util.Random;
public class Program2 {
public static void main(String[] args) {
// String n = new String("hello"); //String클래스 객체를만든것, 문자를 조작할수있는 기능들을갖고있다.
// String n1 = "hello"; //객체화됨, 문자열을 담고있는도구 /
String n1 = "홍길동";
String n2 = "홍길동";
String n3 = new String("홍길동");
String n4 = new String("홍길동"); //객채비교
System.out.println(n1 == n2); //참 new연산자
System.out.println(n1.equals(n2)); //참 *자주사용함
System.out.println(n3 == n4); //거짓
System.out.println(n3.equals(n4)); //참
//
String fileName = "photo.jpg";
System.out.println(fileName.length()); // 9
System.out.println(fileName.indexOf(".")); //"."가 포함되었는지? 5
System.out.println(fileName.substring(3)); //to.jpg
// System.out.println(fileName.substring(3,2)); // 에러
System.out.println(fileName.substring(3,5)); // 인덱스3~4까지 to
//
//위의 파일명에서 .이있는곳까지의 문자열을 출력(단.제외)
int a = fileName.indexOf(".");//위치파악
System.out.println(fileName.substring(0,a)); //-1이상이면 0부터있다는걸로파악.
System.out.println(fileName.substring(a,8)); //-1이상이면 0부터있다는걸로파악.
System.out.println(fileName.compareTo("aphoto.jpg")); // 15 > 0 보다크다면
System.out.println(fileName.compareTo("photo.jpg")); // 문자열 같을때 0을 반환
System.out.println(fileName.compareTo("qphoto.jpg")); // -1
System.out.println(fileName.compareTo("rphoto.jpg") > 0); // -2 0보다작으면 괄호
//fileName 이 크면 양수, fileName이 괄호()보다 작으면 음수
//"912"(문자열은 1 2 라고읽는다) "9" 문자열의크기 앞글자의 비교
String[] names = new String[] {"강호동","유재석","하하","김지호","김현준","김태희","박민정"};
Random rand = new Random();
for(int i=0; i<100;i++) {
int idx1 = rand.nextInt(7); //0~6
int idx2 = rand.nextInt(7); //0~6
// System.out.printf("idx1 :%d, idx2:%d\n",idx1,idx2); //랜덤값을 확인한다.
String temp; //데이터형이달라져도 똑같다.
temp = names[idx1]; //랜덤값끼리 섞어준다
names[idx1] = names[idx2];
names[idx2] = temp;
}
for(int i=0;i<7;i++) {
System.out.printf("\"%s\"",names[i]);
if(i<7-1)
System.out.print(",");
}
//정렬
for(int j=0;j<7-1;j++)
for(int i=0;i<7-1-j;i++)
if(names[i].compareTo(names[i+1]) > 0){
String temp;
temp = names[i];
names[i] = names[i+1];
names[i+1] = temp;
}
}
}
package ex3.array.test2;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Random;
import java.util.Scanner;
public class Program3 {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("res/names.txt");
Scanner fscan = new Scanner(fis);
String line = fscan.nextLine();
String[] names = line.split(",");//쉼표기반으로 잘라줌
// System.out.println(names[1].trim()); //문자열앞뒤빈공백없애줌
String names1 = names[1].trim();
System.out.println(names[1].trim());
fscan.close();
fis.close();
}
}
'2021 Newlecture > JAVA' 카테고리의 다른 글
2차원배열 / 반복문을 통해 1차원배열생성 하면서 2차원배열에 대입 (0) | 2021.03.17 |
---|---|
2차원배열 / 열에서 최대값 구하기/ 해당 인덱스값구하기/값변화 차이 (0) | 2021.03.16 |
2차원배열/ 코로나 검사진행자 누적수 구하기/ 열의 합 구하기 (0) | 2021.03.15 |
코로나 검사 누적수 구하기 / 반복문 / 문자열구분 (0) | 2021.03.12 |
사진복사 / write(byte [] b, int off, int len) 이용해 출력 (0) | 2021.03.11 |
배열 / FileInputStream / Scanner()/ hasNextLine() / while() (0) | 2021.03.10 |
배열/ 랜덤값 radom()/ 섞기 / 버블정렬(가장 큰 숫자찾기) (0) | 2021.03.10 |
File Stream이용해 파일복사하기/ read(byte[] b)/ 배열과 for문 / (0) | 2021.03.09 |