-
기타 API프로그래밍/JAVA 자바 2021. 7. 22.반응형
숫자에 대한 포맷
package ex0721; import java.text.NumberFormat; import java.util.Locale; public class Ex01_NumberFormat { public static void main(String[] args) { // TODO Auto-generated method stub String s; //숫자에 대한 포맷 NumberFormat nf = NumberFormat.getInstance(); int a = 12345; s = nf.format(a); System.out.println(s); //12,345 //자리수 구분 s = String.format("%,d", a); System.out.println(s); //12,345 double b = 31456.2569; s = nf.format(b); System.out.println(s); //31,456.257 반올림 되었음 NumberFormat nf2 = NumberFormat.getInstance(); nf2.setMaximumFractionDigits(4); //소수점 이하 최대 4자리 nf2.setMinimumFractionDigits(2); //소수점 이하 최소 2자리 System.out.println(nf2.format(1234.456789)); //1,234.4568 System.out.println(nf2.format(1234)); //1,234.00 System.out.println(nf2.format(1234.5)); //1,234.50 //통화에 대한 서식 NumberFormat nf3 = NumberFormat.getCurrencyInstance(); System.out.println("원화: "+nf3.format(12345)); //₩12,345 //국가를 변경 = Locale // Locale.KOREA << 한국으로 변경 NumberFormat nf4 = NumberFormat.getCurrencyInstance(Locale.US); System.out.println("달러: "+nf4.format(12345)); //$12,345.00 // %에 대한 서식 NumberFormat nf5 = NumberFormat.getPercentInstance(); System.out.println("퍼센트 : " + nf5.format(0.23)); //퍼센트 : 23% } }
NumberFormat으로 숫자 자리수 구분 가능
-setMaximumFractionDigits = 소수점 자리 최대치 설정 가능
-setMinimumFractionDigits = 소수점 자리 최소치 설정 가능
NumberFormat.getCurrencyInstance(); = 통화에 대한 서식 ₩를 붙여준다
NumberFormat.getCurrencyInstance(Locale.US); = 달라로 바꿔준다
NumberFormat.getPercentInstance(); = %에 대한 서식
package ex0721; import java.text.NumberFormat; import java.text.ParseException; public class Ex02_NumberFormat { public static void main(String[] args) { // TODO Auto-generated method stub String s1 = "1000"; String s2 = "1,234"; String s3 = "4567.12"; //int a = Integer.parseInt(s2); // 런타임 오류 문자열에 ,가 있어서 int a = Integer.parseInt(s2.replaceAll(",", "")); System.out.println(a); // 문자열을 숫자로 바꿀꺼임 NumberFormat nf = NumberFormat.getInstance(); //Number : Integer, Long, Double 등의 상위 클래스 //Integer, Long, Double 클래스는 서로 상하 관계가 성립되지 않는다. try { Number n1 = nf.parse(s1); Number n2 = nf.parse(s2); Number n3 = nf.parse(s3); System.out.println(n1); //1000 System.out.println(n2); //1234 System.out.println(n3); //4567.12 //System.out.println(n1 + 5); //컴파일 오류 n1는 객체이며 사칙연산 불가능 //Integer, Long, Double은 연산이 가능함 //Integer ob = (Integer)n1; // Number를 Integer로 형변환 . 런타임 오류(Long을 Integer로 형변환해서) Long ob = (Long)n1; // parse()로 형변환된 결과 / 정수는 Long, 실수는 Double System.out.println(ob+100); // 실제로는 ob.longValue()+100 임 //실수를 정수형만 처리하도록 nf.setParseIntegerOnly(true); Number n4 = nf.parse(s3); System.out.println(n4); //4567 } catch (ParseException e) { // 예외가 발생할 때 e.printStackTrace(); } } }
Number : Integer, Long, Double 등의 상위 클래스
ChoiceFormat = 특정 값의 범위를 문자열로 반환
package ex0721; import java.text.ChoiceFormat; public class Ex03_ChoiceFormat { public static void main(String[] args) { // 특정 값의 범위를 문자열로 반환 double [] limits = {60,70,80,90}; //적은 수에서 큰수 순으로 String [] grade = {"D","C","B","A"}; ChoiceFormat cf = new ChoiceFormat(limits, grade); System.out.println("95 : " + cf.format(95)); System.out.println("85 : " + cf.format(85)); System.out.println("55 : " + cf.format(55)); System.out.println(); limits = new double [] {0,60,70,80,90}; grade = new String [] {"F","D","C","B","A"}; ChoiceFormat cf2 = new ChoiceFormat(limits, grade); System.out.println("95 : " + cf2.format(95)); System.out.println("85 : " + cf2.format(85)); System.out.println("55 : " + cf2.format(55)); System.out.println(); String p = "60#D|70#C|80<B|90#A"; //60점 까지는 D, 70점까지는 C, 80보다 크면 B, 90이상 A ChoiceFormat cf3 = new ChoiceFormat(p); System.out.println("95 : " + cf3.format(95)); //A System.out.println("80 : " + cf3.format(80)); //C System.out.println("85 : " + cf3.format(85)); //B System.out.println("65 : " + cf3.format(65)); //D System.out.println("55 : " + cf3.format(55)); //D // 95=4.5 /90=4.0 /60=1.0 limits = new double [] {0,60,65,70,75,80,85,90,95}; grade = new String [] {"0.0","1.0","1.5","2.0","2.5","3.0","3.5","4.0","4.5"}; //String p = "0#0.0|60#1.0|65#1.5|70#2.0|75#2.5|80#3.0|85#3.5|90#4.0|95#4.5"; ChoiceFormat cf4 = new ChoiceFormat(limits, grade); System.out.println("95 : " + Double.parseDouble(cf4.format(95))); System.out.println("85 : " + Double.parseDouble(cf4.format(88))); //<<더블형으로 변환해 준것 System.out.println("80 : " + cf4.format(80)); // << 이건 결과가 String형임 더블형으로 변환해줘야함 System.out.println("75 : " + cf4.format(75)); System.out.println("70 : " + cf4.format(70)); System.out.println("65 : " + cf4.format(65)); System.out.println("60 : " + cf4.format(60)); System.out.println("50 : " + cf4.format(50)); } }
DecimalFormat = 패턴 형식으로 숫자를 문자열로 반환
package ex0721; import java.text.DecimalFormat; public class Ex04_DecimalFormat { public static void main(String[] args) { // 패턴 형식으로 숫자를 문자열로 반환 String s; DecimalFormat df1 = new DecimalFormat("#,##0"); s = df1.format(2345.536985); //반올림 함 System.out.println(s); //2,346 DecimalFormat df2 = new DecimalFormat("#,###.##"); System.out.println(df2.format(1234.456)); //1,234.46 System.out.println(df2.format(1234)); //1,234 System.out.println(df2.format(0.0)); //0 System.out.println(df2.format(0.5)); //0.5 System.out.println(); DecimalFormat df3 = new DecimalFormat("0.##"); System.out.println(df3.format(1234.456)); //1234.46 System.out.println(df3.format(1234)); //1234 System.out.println(df3.format(0.0)); //0 System.out.println(df3.format(0.5)); //0.5 System.out.println(); DecimalFormat df4 = new DecimalFormat("#,##0.0#"); System.out.println(df4.format(1234.456)); //1,234.46 System.out.println(df4.format(1234)); //1,234.0 System.out.println(df4.format(0.0)); //0.0 System.out.println(df4.format(0.5)); //0.5 System.out.println(); DecimalFormat df5 = new DecimalFormat("000.#"); System.out.println(df5.format(1234.456)); //1234.5 System.out.println(df5.format(1234)); //1234 System.out.println(df5.format(0.0)); //000 System.out.println(df5.format(0.5)); //000.5 System.out.println(); } }
두 날짜 사이의 간격을 분으로
두 날짜 사이의 간격을 일자로
package ex0721; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Ex05_SimpleDateFormat { public static void main(String[] args) { long a; a = doffOfMinutes("2021-05-21 10:10:10", "2021-07-21 12:15:20"); System.out.println("두 날짜 차이(분) : "+ a); a = diffOfDay("2021-05-21", "2021-07-21"); System.out.println("두 날짜 차이(일자) : "+ a); } // 나중에 예외처리 해야 함 //두 날짜 사이의 간격을 분으로 : (날짜 형식 : yyyy-MM-dd HH:mm:ss) public static long doffOfMinutes(String begin, String end) { long result = 0; SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss"); try { Date beginDate = sdf.parse(begin); Date endDate = sdf.parse(end); result = (endDate.getTime()-beginDate.getTime()) / (1000*60); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return result; } //두 날짜 사이의 간격을 일자로 (날짜 형식 : yyyy-MM-dd) public static long diffOfDay(String begin, String end) { long result = 0; SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd"); try { Date beginDate = sdf.parse(begin); Date endDate = sdf.parse(end); result = (endDate.getTime()-beginDate.getTime()) / (1000*60*60*24); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return result; } }
MessageFormat
package ex0721; import java.text.MessageFormat; public class Ex06_MessageFormat { public static void main(String[] args) { // 데이터를 정해진 양식에 맞게 출력할 수 있는 메소드를 제공 // 데이터가 들어갈 자리를 마련해 놓은 양식을 미리 작성 String str = "이름 : {0}\t전화 : {1}\t나이 : {2}"; //String [] ss = {"김자바", "010-1111-1111", "20"}; 경고나옴 // Object는 자바의 최상위 클래스로써 모든 클래스의 객체를 참조할 수 있다.(Up casting) Object [] ss = {"김자바", "010-1111-1111", "20"}; String result = MessageFormat.format(str, ss); System.out.println(result); System.out.println(); // INSERT INTO demo (name,tel,age) VALUES ('호호호', '010-1111-1111', 20); // 홑 따옴표는 MessageFormat에서 escape 문자로 홑따옴표를 출력하기 위해서는 홑따옴표를 두번 사용해야함 // 홑 따옴표를 한번만 사용하면 값이 들어갈 위치를 나타내는것이 아니라 {0} 자체를 표시해버린다. String sql = "INSERT INTO demo (name,tel,age) VALUES (''{0}'',''{1}'',''{2}'')"; Object[][] datas = { {"자바", "010-1111-2222", 20}, {"스프링", "010-2222-3333", 21}, }; String s; for(int i=0; i<datas.length; i++) { s = MessageFormat.format(sql, datas[i]); System.out.println(s); } } }
MessageFormat.format(양식, 데이터);
Arrays
package ex0721; import java.util.Arrays; import java.util.Collections; public class Ex07_Arrays { public static void main(String[] args) { // Arrays : 배열에 관련된 다양한 메소드 제공 String s; String[]ss = new String[] {"서울","부산","대구","인천","광주","대전","울산","세종",}; s = Arrays.toString(ss); // 배열의 각요소를 "[값1,값2,값n]"형식의 문자열로 반환 System.out.println(s); //오름차순 정렬 Arrays.sort(ss); s = Arrays.toString(ss); System.out.println("오름 차순 정렬 이후 : " + s); //내림차순 정렬 Arrays.sort(ss, Collections.reverseOrder()); s = Arrays.toString(ss); System.out.println("내림차순 정렬 이후 : "+s); //Object[] oo = {"자바",60,"스프링",70}; //배열에 String 과 Integer 자료가 존재 //Arrays.sort(oo); // 서로 다른 자료형이 존재해서 런타임 오류 } }
내림차순 = Arrays.sort(ss, Collections.reverseOrder());
이진 검색 = 반드시 오름차순으로 정렬 되어 있어야 가능
package ex0721; import java.util.Arrays; public class Ex08_Arrays { public static void main(String[] args) { // 이진 검색 String[]ss = new String[] {"서울","부산","대구","인천","광주","대전","울산","세종",}; int idx; Arrays.sort(ss); System.out.println("오름차순 정렬 후 : " +Arrays.toString(ss)); //이진 검색 - 반드시 오름차순으로 정렬 되어 있어야 가능 idx = Arrays.binarySearch(ss, "인천"); //인천의 인덱스 반환 System.out.println("인천 위치 : " + idx); idx = Arrays.binarySearch(ss, "경기"); //존재하지 않으면 -1 반환 System.out.println("경기 위치 : "+idx); } }
배열 복사
package ex0721; import java.util.Arrays; public class Ex09_Arrays { public static void main(String[] args) { // 배열 복사 String[]ss = new String[] {"서울","부산","대구","인천","광주","대전","울산","세종",}; String [] ss2 = Arrays.copyOf(ss, ss.length); // 복사 대상, 새로운 길이 System.out.println(Arrays.toString(ss2)); String [] ss3 = Arrays.copyOfRange(ss, 1, 4); // 복사 대상, from, to-1 System.out.println(Arrays.toString(ss2)); // System.arraycopy가 Arrays.copyOf()보다 성능이 더 우수함 String [] ss4 = new String[ss.length]; System.arraycopy(ss, 0, ss4, 0, ss.length); System.out.println(Arrays.toString(ss4)); } }
배열 비교
package ex0721; import java.util.Arrays; public class Ex10_Arrays { public static void main(String[] args) { // 배열 비교 int[] a = {1,2,3}; int[] b = {1,2,3}; int[] c = {1,2,3,4,5}; //주소 비교 System.out.println(a == b); //false System.out.println(a == b); //false System.out.println(a.equals(b)); //false System.out.println(a.equals(c)); //false System.out.println(); //요소의 값 비교 (내용물 비교) System.out.println(Arrays.equals(a, b)); //true System.out.println(Arrays.equals(a, c)); //false System.out.println(); int[][] aa = {{1,2,3},{4,5,6}}; int[][] bb = {{1,2,3},{4,5,6}}; System.out.println(Arrays.equals(aa, bb)); //false // 2차원에서는 1차원에서 가지고 있는 주소를 비교하니까 false 얕은 복사임 System.out.println(Arrays.deepEquals(aa, bb)); //true // 2차원에서 1차원이 가지고 있는 주소가 가진 값을 비교(2차원의 값 비교) } }
2차원 배열 비교는
Arrays.deepEquals(a,b)
반응형'프로그래밍 > JAVA 자바' 카테고리의 다른 글
클래스 상속, override (0) 2021.07.22 Calendar 클래스 / 날짜 형식이 올바른지 판단하기 (0) 2021.07.22 Calendar API / StringBuilder (0) 2021.07.21 자바의 기본 API 클래스 (String, 기본) (0) 2021.07.20 접근 제한자 / 성적 처리 코드 (0) 2021.07.19