ex. 기타 및 참고사항


Escape Sequence

- **문자열 안에서** 특별한 의미로 해석되는 문자
- 표현하기 어려운 문자상수를 표현한다.
    > \n 개행   
    > \t 탭   
    > \" 큰 따옴표   
    > \\ 역슬래쉬
public class EscSequence{
    public static void main(String[] a){
        System.out.println("a+b"); // 출력 a+b
        System.out.println("a"+"b"); // 출력 ab
        System.out.println("a\"+\"b"); // 출력 a"+"b
    }
}

사용자로부터 입력

a. Scanner클래스

- 사용자로부터 정보를 입력받을 때 사용한다.
- java.util 패키지 내에 있어, import 예약어를 이용한다.
> public boolean nextBoolean()   
> public byte nextByte()   
> public short nestShort()   
> public int nextInt()   
> public long nextLong()   
> public float nextFloat()   
> public double nextDouble()   
> public String nextLine()
import java.util.*; //스캐너가 들어있는 package
class ScannerTest{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in); //입력받은 데이터를 저장할 참조변수

        String name = sc.nextLine(); //데이터 입력

    }
}

b. System.in.read

  • 스캐너 이용시 nextChar 이란 메서드는 없었다.
  • System.in.read() 메서드를 이용한다.
  • 사용자가 입력한 데이터의 앞의 1바이트만 읽는다.
  • 아스키코드 값을 반환해준다.
  • ABC 입력 시 A에 해당하는 코드 65를 반환
  • java.io 패키지에 존재한다.
import java.io.*;
class If{
  public static void main(String[] args) throws IOException{
    System.out.println("약관에 동의합니까(Y/N)");
    char agree = (char)System.in.read();
    
    switch(agree){
      case 'Y':
        System.out.println("동의");
        break;
      case 'N':
        System.out.prinln("반대");
        break;
      default:
        System.out.println("잘못입력");
        break;
      }
  }
}

c. 명령줄 인수(Command-Line Arguments)

  • 자바프로그램의 main 메서드의 형식을 보면

    public static void main(String[] args)

  • main메서드 또한 문자열 배열을 매개변수로 받는 메서드임을 알 수 있다.
  • cmd창에서 자바프로그램 실행 시, 배개변수 입력을 통해 main메서드에 매개변수를 전달할 수 있다.

    기존 자바프로그램 (Test.class) 실행 시 파일 경로> java Test
    매개변수 전달 시
    파일 경로> java Test 매개변수1 매개변수2 매개변수3 …

  • main 메서드 내에서 args[] 배열을 통해 문자열에 접근할 수 있다.
class CmdTest{
	public static void main(String[] args){
		for (String s : args) System.out.println(s) ;
		// cmd창에서 프로그램 실행과 동시에 매개변수를 입력한 만큼
		// 해당 매개변수가 출력되는 것을 알 수 있다.
	}
}

String 클래스

a. equals()

  • 기본자료형에서 등가연산자(==)는 값을 비교한다. (a==b)
  • 참조형에서 등가연산자는 주소값을 비교한다.
  • 문자열 내용 비교는 String 클래스의 equals()메서드 이용
import java.util.*;
class If{
  public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    System.out.println("약관에 동의합니까(Y/N)");
    String agree = sc.nextLine();
    if (agree.equals("Y"){
      System.out.println("동의하셨습니다");
    }
  }
}

b. toString()

  • Object클래스의 toString()메서드
  • 해당 객체가 어떤 객체인지 문자열로 표현하는 값 리턴
    • 클래스명@16진수 해시코드
  • p.toString()과 p를 출력한 결과값 동일
    • 클래스의 멤버가 할당된 주소를 숨기려는 특성=>
    • 직접 주소 칠력시, 자동으로 출력형식의 메서드 (toString)로 연결
  • 자동으로 호출되는 경우
    • System.out.pritnln() 메서드에 매개변수로 들어가는 경우
    • 객체에 대하여 더하기 연산을 하는경우
  • 클래스에서 오버라이딩 후 사용 가능
  • toString 결과값 확인
class Person{
	public void showInfo() {
		System.out.println(this);
	}
}

public class ToStringTest {

	public static void main(String[] args) {
		Person p = new Person();
		p.showInfo();
		
		System.out.println("p객체 문자열"+p.toString());
		System.out.println("p"+p);
		System.out.println(p);

	}
}
  • toString 오버라이딩
class Person2{
	private String name;
	private int age;
	
	//object의 toString()메서드를 오버라이딩
	public String toString() {
		return "Person2[name="+name+", age="+age+"]";
	}
}

public class ToStringTest2 {

	public static void main(String[] args) {
		Person2 p =new Person2();
		System.out.println(p);
		System.out.println(p.toString());
		

	}

}

c. length

  • 변수,length()
  • 문자열의 길이 확인

String a = “가나다라마바”; int b = a.length(); // b=6

d. charAt

  • 변수.charAt(i)
  • String의 문자열중 한글자만 선택해 char 타입으로 변환
  • i값은 String 문자열 내 index번호
  • index는 0부터 문자길이-1 까지
class cA{
	public static void main(String[] args){
		String str = "가나다라마"
		// index 0번 : 가
		// index 4번 : 마
		char c = str.charAt(0); // c에 '가'가 저장된다.
		char d = str.charAt(3); // d에 '라'가 저장된다.
		System.out.println(c); //가
	}
}

-nextLine 뒤에 붙여 바로 뽑아내는 것도 가능하다.

String a= “가나다라마”; char b = sc.nextLine().charAt(1);

e. indexOf, substring

  • indexOf
    • 문자열을 첫부분부터 검색, 입력한 문자열을 만나는 위치를 int로 반환
  • lastIndexOf
    • 문자열을 마지막 부분부터 검색, 입력한 문자열을 만나는 위치를 int로 반환
  • substring
    • 일부 문자열 추출
public class StringTest {

	public static void main(String[] args) {
		            //012345678901234567890123456789
		String str = "Hello Java, Hi Java!";
		char ch = str.charAt(4); //o
		System.out.println("ch="+ch);
		
		int idx = str.indexOf("Java");
		System.out.println("앞 Java의 위치 : "+idx); //6
		System.out.println("뒤 Java의 위치 : "+str.lastIndexOf("Java")); //15
		
		String sub = str.substring(6,10); //6<= x < 10, Java
		System.out.println("sub="+sub);
		System.out.println(str.substring(15)); //15부터 끝까지, Java!
		
		String s = "www.nate.com";
		if(s.startsWith("www")) {
			System.out.println("www로 시작함");
			
		}
		if (s.endsWith(".com")) {
			System.out.println(".com으로 끝남");
		}
		
		            //01234567890123
		String email="hong@gmail.com"; 
					//
		if(email.indexOf("@") != -1&& email.indexOf(".")!=-1
				&& email.indexOf("@")<email.indexOf(".")) {
			System.out.println("이메일 규칙이 올바르다");
		}else {
			System.out.println("이메일 규칙이 올바르지 않다");
		}
		
		int gol = email.indexOf("@");
		int dot = email.lastIndexOf(".");
		//hong만 추출
		System.out.println(email.substring(0,gol));
		//com
		System.out.println(email.substring(dot+1));
		//gmail
		System.out.println(email.substring(gol+1,dot));
	}
}

. String[] split

  • 특정 문자들을 경계로 하여 문자열을 여러개의 토막으로 분리
  • 인수로 배열을 전달하면, 토막 문자열을 배열형태로 리턴
package com.day23.extra;

public class SplitTest {

	public static void main(String[] args) {
		//String[] split(String regex)
		str = "java,oracle,jsp,spring";
		String[] arr = str.split(",");
		for(String s3 : arr) System.out.println(s3);
		
		System.out.println("\n\n");
		str="html.css.js.jquery";
		String[] arr2 = str.split("\\.",3); //특정 기호로 잘리지않으면 역슬래시 두개
						//두번째 매개변수는 limit, 자를 개수
		for(String s3 : arr2) System.out.println(s3);

	}
}

. replace

  • 문자열을 다른 문자열로 교체
public class SplitTest {

	public static void main(String[] args) {
		String str = "123456789";
		String s = str.replace('7', '칠');
		String s2 = str.replace("89", "여덟아홉");
		System.out.println(s);
		System.out.println(s2);
	}
}

. trim

  • 앞위 공백 제거
s="             java spring!!          ";
String s2= s.trim();
System.out.println("s2=["+s2+"]"); // [java spring!!]

Character클래스

a. 대문자 변환 메서드

  • Character.toUpperCase()
import java.io.*;
class a62 {
	public static void main(String[] args) throws IOException{
		System.out.println("a를 입력하세요");
		char pick = (char)System.in.read();
    
    System.out.println(pick); // a
		char pick = (char)System.in.read();
		pick = Character.toUpperCase(pick);
		System.out.println(pick); // A

	}
}

b. 숫자, 알파벳 여부 확인 메서드

  • Character.isAlphabetic();
    • 알파벳인 경우 true를 반환
  • Character.isDigit();
    • 숫자인 경우 true를 반환
import java.util.*;
import java.io.*;
class  a66{
	public static void main(String[] args) throws IOException {
		String rst3 ="";
		System.out.println("0~9나 알파벳, 그외 문자를 입력하세요");
		char pick = (char)System.in.read();
		if(Character.isAlphabetic(pick)){
			rst3 ="알파벳 문자";
		}else if(Character.isDigit(pick)){
			rst3 ="숫자";
		}else{
			rst3="기타 문자";
		}
		System.out.println("입력한 값: "+pick+"\n"+rst3+"입니다");
	}
}

hasNext()

  • 다음 데이터가 있다면 true를 반환한다.
		Scanner sc = new Scanner("\n\n가나다 하나 둘\n\n라\n\n");
		String str = "";
		while(sc.hasNext()) {
			str=sc.nextLine();
			System.out.println("출력 : " + str);
		}//while
		
		str = sc.nextLine();
		System.out.println("while문 탈출 후 1:" + str);

출력 : //\n
출력 : //\n
출력 : 가나다 하나 둘 //가나다 하나 둘\n
출력 : //\n
출력 : 라 //라\n
while문 탈출 후 1:

  • nextLine은 엔터값 기준으로 데이터를 읽는다.
  • 다음 데이터가 엔터값 하나라면 데이터가 없다 판단해 false를 반환한다.
		Scanner sc = new Scanner("\n\n가나다 하나 둘\n\n라\n\n");
		String str = "";
		while(sc.hasNext()) {
			str=sc.next();
			System.out.println("출력 : " + str);
		}//while
		
		str = sc.nextLine();
		System.out.println("while문 탈출 후 1:" + str);
		str = sc.nextLine();
		System.out.println("while문 탈출 후 2:" + str);
		str = sc.nextLine();
		System.out.println("while문 탈출 후 3:" + str);

출력 : 가나다
출력 : 하나
출력 : 둘
출력 : 라
while문 탈출 후 1:
while문 탈출 후 2:
while문 탈출 후 3: //데이터가 없기 때문에 error

  • nextLine은 공백 기준으로 데이터를 읽는다.

Math클래스

  • 수학 함수들을 제공하는 클래스
  • 모든 계산 메서드는 static
  • 두 개의 상수
    • Math.E
      • 자연로그의 밑, 2.7182
    • Math.PI
      • 원주율, 3.1415
  • abs() : 절대값
  • ceil() : 올림
  • floor() : 내림

a. Math.round

  • 반올림 함수
  • 실수를 반올림하여 정수로 반환한다.
  • float => int
  • double => long

float a = 3.1415f;
int b = Math.round(a); // b=3

  • 소숫점 자리를 원할경우

float a= 3.1415f;
int b = Math.round(a*100); // b=314;
float c = b/100f; // c = 3.14;
static int round (float a)
static long round (double a)

class mr{
	public static voud main(String[] a){
		int num1 = Math.round(3.14f); // 3
		long num2 = Math.round(-3.8); // -4
	}
}

b. Math.random()

  • 0.0 <= x < 1.0 의 실수를 랜덤으로 추출한다.
  • 원하는 범위의 정수 추출하기 ex(1~100)
    • 범위 곱하기
      • 범위 100
      • Math.random()*100
      • 0.0 <= x < 100.0
    • 시작값 더하기
      • 시작값 1
      • Math.random()*100 +1
      • 1.0 <= x < 101.0
    • 정수로 변환
      • (int)(Math.random()*100+1)
      • 1 <= x < 101
  • 원하는 범위의 숫자 추출하기 ex(a (97) ~ z (122))
    • 범위 곱하기
      • 범위 26
      • Math.random()*26
      • 0.0 <= x < 26.0
    • 시작값 더하기
      • 시작값 97
      • Math.random()*100 +1
      • 97.0 <= x < 123.0
    • 정수로 변환
      • (int)(Math.random()*100+1)
      • 97 <= x < 123

array클래스

a. arrays.sort()

  • 배열 요소를 오름차순 정렬해주는 메서드
  • public static void sort(int[] a)
import java.util.*;
public class SortTest {
	public static void main(String[] args) {
		int[] arr = {10,5,44,55,1000,140,3,55};
		
		System.out.println("sort 정렬전");
		for(int i: arr)System.out.print(i+"\t");
		System.out.println("\n");
		
		System.out.println("sort 정렬후");
		Arrays.sort(arr);
		for(int i:arr) System.out.print(i+"\t");
		System.out.println("\n");
	}
}

Calendar & Date 클래스

  • 날짜와 시간에 관련된 데이를 처리하기 위한 클래스
  • java.util에 존재
  • Calendar
    • 추상클래스로, 메서들 통해 구현된 클래스의 인스턴스를 얻어야 한다.
    • Calendar cal = Calendar.getInstance();
      • getInstance는 캘린더 클래스를 구현한 클래스의 인스턴스 반환
    • Calendar cal = new GregorianCalendar();
    • GregorianCalendar cal = new GregorianCalendar()
      • 양력을 나타내는 자식클래스
  • Calendar를 Date로
    • Date date = cal.getTime();
  • Date를 Calendar로
    • cal.setTime(date);
import java.util.*;


public class DateTest1 {

	public static void main(String[] args) {
		Date d = new Date();
		System.out.println(d);
		System.out.println(d.toLocaleString());
		
		int year=d.getYear();
		System.out.println((year+1900)+"년");
		System.out.println((d.getMonth()+1)+"월 "+d.getDate()+"일");
		//=> 월은 0~11 리턴
		
		System.out.println(d.getHours()+":"+d.getMinutes()+":"
				+d.getSeconds());
		
		System.out.println("요일:"+d.getDay()); //0 : 일요일
		
		//1970-01-01 0:0:0 기준 경과된 시간을 밀리초로 리턴
		long gap = d.getTime()/1000;  //초 (초는 1000밀리초)
		System.out.println("1970~ 경과시간(초)"+gap);
		
		gap=gap/(24*60*60); //일
		System.out.println("경과일수:"+gap+"일");

	}
}
public class CalanderTest {

	public static void main(String[] args) {
		// Calendar cal = new Calendar(); error
		Calendar cal = Calendar.getInstance();
		Calendar cal2 = new GregorianCalendar();
		
		int year = cal.get(Calendar.YEAR);
		int month = cal.get(Calendar.MONTH);
		int date = cal.get(Calendar.DATE);
		int h = cal.get(Calendar.HOUR); //12시간
		int h2 = cal.get(Calendar.HOUR_OF_DAY); //24시간
		int m = cal.get(Calendar.MINUTE);
		int s = cal.get(Calendar.SECOND);
		int week = cal.get(Calendar.DAY_OF_WEEK);
		
		System.out.println(year+"-"+(month+1)+"-"+date);
		System.out.println(h+":"+m+":"+s);
		System.out.println(h2+"시, "+cal.get(Calendar.AM));
		System.out.println("요일:"+week); // 1: 일요일
		
		long gap = cal.getTimeInMillis()/1000;
		gap=gap/(24*60*60);
		System.out.println("경과일"+gap);
		
					//  0   1    2    3   4    5   6   7
		String[] arr = {"","일","월","화","수","목","금","토"};
		System.out.println("요일 : " + arr[week]);
		

	}

}

public class CalendarTest2 {

	public static String showDate(Calendar cal) {
		return cal.get(Calendar.YEAR)+"년"
		+(cal.get(Calendar.MONTH)+1)+"월"
		+cal.get(Calendar.DATE);
	}
	
	public static void main(String[] args) {
		// 100일 후, 3개월 전, 7년 후
		Calendar today = Calendar.getInstance();
		
		//2022-01-01
		Calendar cal = new GregorianCalendar(2022,0,1);
		
		System.out.println("현재일자 : "+showDate(today));
		
		System.out.println("\n===100일 후===");
		today.add(Calendar.DATE, 100);
		System.out.println(showDate(today));
		
		today.add(Calendar.MONTH, -3);
		System.out.println("\n3개월전 일자 : "+showDate(today));

		today.add(Calendar.YEAR, 7);
		System.out.println("\n7년후 일자 : "+showDate(today));
		
		//2 두 날짜 사이의 간격
		// 크리스마스까지 며칠 남았는지
		Date d = new Date();
		Date d2 = new Date(2022-1900,11,25);
		
		long gap = (d2.getTime()-d.getTime())/1000;
		gap=gap/(24*60*60);
		
		System.out.println("\n"+d.toLocaleString());
		System.out.println(d2.toLocaleString());
		System.out.println("\n 두 날짜 사이의 간격 : " + gap);
	}

}
public class Calendat {

	public static void main(String[] args) {
		// 1. Calendar를 Date로 변환
		Calendar cal = Calendar.getInstance();
		cal.set(2022,5,10);
		
		Date d = cal.getTime();
		System.out.println(d.toLocaleString());
		
		//2. Date를 Calendar로 변환
		Date date = new Date(2022,7,23);
		Calendar cal2 = Calendar.getInstance();
		cal2.setTime(date);
		
		System.out.println(CalendarTest2.showDate(cal2));

	}
}

형식화 클래스

DecimalFormat

  • 형식화 클래스 중 숫자를 형식화하는데 사용된다
  • 숫자 데이터를 정수, 부동소수점, 금액 등의 다양한 형식으로 표현
  • 숫자를 형식화된 문자열로 변환
  • 반대로 일정한 형식의 텍스트 데이터를 숫자로 변환도 가능
import java.text.*;
class PrintTest{
	public static void main(String[] args) {
		DecimalFormat df = new DecimalFormat("#,###.##");
		String s2 = df.format(1234567.89512);
		System.out.println("\n" +s2); // 결과 1,234,567.9

		DecimalFormat df2 = new DecimalFormat("#,###.00");
		s2 = df2.format(1234567.89512);
		System.out.println("\n" +s2); // 결과 1,234,567.90

		DecimalFormat df3 = new DecimalFormat("#,##0");
		s2 = df3.format(123456.723456);
		System.out.println("\n" +s2); // 결과 123,457
	}
}

SimpleDateFormat

  • 날짜 데이터를 원하는 형태로 출력
  • Date 인스턴스만 format()메서드 사용 가능
  • parser()메서드는 문자열을 날짜로 변환
import java.util.*;
import java.text.*;
class DateFormatEx2{
	public static void main(String[] args) {
		// Calendar와 Date간의 변환
		Calendar cal = Calendar.getInstance();
		cal.set(2012, 4, 30); // 2012년 5월 30일 - Month는 0~11의 범위
		Date date = cal.getTime();
		SimpleDateFormat sdf1, sdf2, sdf3, sdf4;
		sdf1 = new SimpleDateFormat("yyyy-MM-dd");
		sdf2 = new SimpleDateFormat("yy-MM-dd E요일");
		sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
		sdf4 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
		String str = sdf1.format(date) // format(Date d)
		System.out.println(str); 
		System.out.println(sdf2.format(date));
		System.out.println(sdf3.format(date));
		System.out.println(sdf4.format(date));
	}
}
import java.util.*;
import java.text.*;
class DateFormatTest5{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("오늘 이전 날짜를 입력하세요(2013-09-30)");
		String str = sc.nextLine();

		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		
		try {
			Date date = df.parse(str);
			Date today=new Date();
			long diff = (today.getTime()-date.getTime())/1000;
			diff = diff/(24*60*60);
			System.out.println("두 날짜 사이의 간격 : "+diff);
		} catch(ParseException e) {
			e.printStackTrace();
		}
	}
}

어노테이션

  • 어노테이션
    • 클래스나 메서드등의 선언시에 @를 사용하는 것
    • 컴파일러에게 정보를 알려준다
    • 컴파일할 때와 설치(deployment) 시의 작업을 지정한다
    • 실행할 때 별도의 처리가 필요할 때 사용
    • 클래스, 메서드, 변수 등 모든 요소에 선언 가능
    • 주석 형태로 소스코드에 메타데이터를 삽입
      • 실제 데이터가 아닌, 데이터를 위한 데이터
  • 자바에 미리 정해져있는 어노테이션
    • @Override
      • 해당 매서드가 부모클래스에 있는 메서드를 오버라이드 했다는 것을 명시적으로 선언
      • 오버라이딩 문법에 맞지 않을 경우 컴파일러가 에러 발생
    • @Deprecated
      • 가급적 사용을 자제하라는 의미
      • 메서드를 사용하거나 오버라이드 할 경우 컴파일 시 경고
    • SuppressWarnings
      • 이 부분에 대해서는 경고문을 출력하지 말라는 의미