• Home
  • About
    • Young's Github Pages photo

      一日不作一日不食

    • About
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

Java 정리 11

27 Nov 2018

Reading time ~5 minutes

Java 정리 11 - String, Array


String class가 제공하는 method

  • 기본형 형식, 참조형 형식, 리터럴 모두 사용 가능
  • Java API 참고하면서 기능, 반환형, 파라미터를 확인하고 사용하도록 한다.
// length()는 문자열의 길이(int)를 반환하는 method

// 기본형 형식으로 String method 사용
String s = "ABC";
int len = s.length();       // 3

// 참조형 형식으로 String method 사용
String str = new String("ABC");
len = str.length();         

// 리터럴로 String method 사용
len = "ABC".length(); 
// 문자열을 영어대문자로 반환하는 메소드 toUpperCase()
String s = "abCDef";
String s1 = s.toUpperCase();    // ABCDEF

// 문자열을 영어소문자로 반환하는 메소드 toLowerCase()
String s2 = s.toLowerCase();    // abcdef

// 특정문자의 인덱스를 반환하는 메소드 indexOf(String s)
int i = s.indexOf("C")          // 2
int j = s.indexOf("k")          // -1, 없는 문자열이면 -1이 나옴

s = "aCbdCe";
//   012345

// indexOf는  -> 방향으로 찾아나감
System.out.println(s.indexOf("C"));     // 1

// lastIndexOf는 뒤에서부터(<-) 찾아나감
System.out.println(s.lastIndexOf("C")); // 4

// index에 해당하는 문자를 반환하는 메소드 charAt(int index)
char c = s.charAt(0);    // a
c = s.charAt(1);         // C

// 문자열 끝에는 null문자가 있기 때문에 시작주소만 전달해도 단어의 끝까지 출력이 가능하다.
// 자식문자열 얻기 substring(시작인덱스, 끝인덱스) 또는 substring(시작인덱스)
// 매개변수 두개를 받을 때 끝인덱스는 null문자를 넣는 위치

s = "abcdef";
//   012345
System.out.println(s.substring(3));        // def
System.out.println(s.substring(1, 4));     // bcd 
// 끝인덱스는 뽑아내고자 하는 문자열+1을 해줘야 원하는 결과가 나온다.

// 문자열 앞뒤 공백제거 trim() (중간공백은 제거할 수 없다)
s = "    abc      ";
String s1 = s.trim(); // abc

s = "    a   b   c     ";
s.trim(); // a   b   c

// 문자열 합치기 concat(String str)
s = "hello";
s1 = s.concat(" world");    // hello world;
s1 = s + " world";         // hello world;

// 특정문자열 치환 replace(char oldChar, char newChar)
// 또는 replaceAll(정규식, 바꿀문자열)

s = "abcdefg";

// c를 k로 변경
System.out.println(s.replace("c", "k"));        // abkdefg
System.out.println(s.replaceAll("cde", "kkk")); // abkkkfg

// replace는 trim대신 사용가능
s = "   AAA BBB   ";
s.replace(" ", "");    // AAABBB

// 문자열이 아무것도 없을 때 isEmpty()
s.isEmpty();    // 비었다면 true, 문자열 있으면 false;

// 문자열 비교시 사용, equals("비교할문자열") true, false 반환
s = "ABC";
s.equals("ABC"); // true

// 어떤 prefix로 시작되었는지 확인하는 startsWith(String prefix)
s.startWith("abc"); // false

// 어떤 문자열(suffix)로 끝났는지 확인하는 endsWith(String suffix)
s.endsWith("C");    // true

// 이 문자열이 포함되는지 contains("문자열") 앞뒤 상관없잎 포함여부확인 불린반환
s.contains("B");    // true

// 기본형 데이터형을 문자열로 변경 static메소드 valueOf()
int i = "1234";
s = String.valueOf(i);

// 특정 문자열로 구분하여 배열로 얻을 때 split("구분할문자열")
s = "1,2,3,4,5,6,7";
String[] str_arr = s.split(",");

for(String str : str_arr) {
    System.out.print(str+" "); // 1 2 3 4 5 6 7
}
s = "";    // empty, 리터럴의 주소는 있으나 값이 없는 상태
s = null;  // null, heap의 주소가 없는 상태
String mail = "young@ssang.kr";           
// 계정명만 얻기
System.out.println(mail+"에서 계정명만 얻기  "+mail.substring(0,mail.indexOf("@")));

// 도메인 주소만 얻기
System.out.println(mail+"에서 도메인 주소만 얻기  "+mail.substring(mail.indexOf("@")+1));

// 문자열이 완벽하게 같은지 비교
str = "정택성";
System.out.println(str+"은(는)  "+(str.equals("이재찬")?"반장":"평민"));

// 치환 : 문자열 내의 모든 문자열을 찾아 치환
str="나 지금 피씨방인데 넌 어디니 씨 방새야";
// 메소드를 연결해서 호출하는 것을 method chain이라 한다.
System.out.println(str.replaceAll("씨",  "*").replaceAll("방", "*")); 

// valueOf(method)를 사용하는게 더 Java스러운 방식
double d = 11.27;
System.out.println(d+"");                // 권장하진 않는다.
System.out.println(String.valueOf(d));

// 객체를 생성하지 않으면 그 클래스가 제공하는 method는 사용할 수 없다.
// 클래스 != 객체
// 이메일을 입력받아 이메일의 유효성을 검증하여 boolean형으로
// 결과를 만들어 반환하는 일을 하는 메소드를 만들어 호출하여 사용해보세요.
public class UseString3 {
     private boolean validEmail(String email) {
           boolean flag = false;
           
           if (email.length()>5 && email.indexOf("@")!=-1
                     && email.indexOf(".")!=-1) {
                flag = true;
           }
                return flag;

           // 이렇게 짧게 리펙토링 가능
           /*return email.length()>5 && email.contains("@")
                     && email.contains(".");*/
     }

     public static void main(String[] args) {
     
           String email = "yg@mm.com";
           UseString3 us = new UseString3();
           
           if (us.validEmail(email) == true) {
                System.out.println("유효한 메일입니다.");
           } else {
                System.out.println("유효하지 않은  메일입니다.");
           }
     }
}
// 메소드는 출력안한다!(일만한다)
// 특별한 요구사항이 없다면 메소드 내에서 출력안함.

Array

  • 참조형 데이터형
  • 일괄처리할 때 사용
    • 한꺼번에 처리(속도 향상)
  • 고정길이형
    • 크기가 정해지면 변경되지 않는 것
  • 모든 방(요소, Element)의 데이터형은 같다
  • 1차원, 2차원, 3차원, 가변배열을 지원

1차원 배열

  • 열로 구성된 배열
// 1. 선언
// [] : 배열기호
데이터형[] 배열명 = null;

// 2. 생성
// 생성되는 배열의 모든 방(요소, Element)은 초기화됨
배열명 = new 데이터형[방의수];

// 1,2를(선언, 생성) 같이 만들 수 있음
데이터형[] 배열명 = new 데이터형[크기];

// 3. 값 할당
배열명[방의번호] = 값;

// 4. 값 얻기
some_var = 배열명[방의번호];

// 인덱스로 방에대한 접근을 수행하기 때문에 
// 잘못된 인덱스를 사용하면 ArrayIndexOutOfBoundsException 발생

// 배열 방의 갯수 얻기
배열명.length

// 일괄처리
for(int i=0; i<배열명.length; i++) {
    배열명[i] // 인덱스로 참조하는 배열의 값 사용
}
public class UseArray {
     
  public UseArray() {
    // 1.배열 선언) 데이터형[] 배열명 = null;
    int[] arr = null;
    
    // 2.배열 생성) 배열명 = new 데이터형[방의갯수];
    // 배열을 생성하면 모든 방의 값이 초기화가 된다.
    arr = new int[6];
    
    // 선언과 생성을 동시에
    int[] arr1 = new int[8];
    
    // 3.값 할당) 배열명[방의인덱스] = 값;
    arr[0] = 11;
    arr[1] = 27;
    arr[2] = 14;
    arr[3] = 46;
    
    // 4.값 얻기) 일괄처리로 출력
    for(int i : arr) {
        System.out.print(i+" ");
    }
    System.out.println();

    // 배열에 없는 인덱스를 사용하면 error
    // ArrayIndexOutOfBoundsException
    // System.out.println(arr[7]);
  }
  
  public static void main(String[] args) {
    new UseArray();
  }
}

1차원 배열의 기본형 형식의 사용

  • 배열을 초기화 할 때 사용
    • new 없이 사용
    • 입력되는 값으로 배열이 생성됨
  • 개발자가 배열의 사용되는 모든 값을 알고 있을 때 사용
데이터형[] 배열명 = { 값, 값, 값, 값, ... };
// 원형 : 데이터형[] 배열명 = new 데이터형[]{ 값, ... };

int[] arr = { 10, 20, 30, 40,  50 };
public class UseArray2 {
  public void arrayPrimitive() {
    
    // 데이터형[] 배열명 = {값,값, ... };
    int[] arr = { 2018, 11, 27, 15, 20 };
    
    // 방의 갯수를 정의하면 error
    // int[] arr1 = new int[6] { 1,2,3,4,5,6,7 };
    int[] arr1 = new int[] { 1,2,3,4,5,6,7 };
    
    // 향상된 for : 배열이나 Collection(List, Set)의  처음 방부터 끝방까지
    // 모든방의 값을 순차적으로 손쉽게 출력할 때 사용
    /*
    * for(배열의 값을 저장할 변수 : 배열) {
    *    변수명
    * }
    */
    for(int i : arr) {
        System.out.print(i+" ");
    }
    System.out.println();

    // arr1배열의 마지막방부터 처음 방까지 출력
    for(int i=arr1.length-1; i>-1; i--) {
        System.out.printf(arr1[i]+" ");
    }
    System.out.println();
  }
  public static void main(String[] args) {
    new UseArray2().arrayPrimitive();
  }
}

숙제풀이



Java