API (Application Programming Interface)
in Programming on C#/Java
- 다른 사람이 만들어 놓은것을 쓰는 것. 안내문, api documentation.
- JAVA8 버전의 Documentation 확인 가능 reference - JAVA API Document
- https://docs.oracle.com/javase/8/docs/api/index.html
String
java.lang 이 기본 패키지
deprecated 가 있으면, 버전 업그레이드 시 사라짐으로 사용하지 않는게 좋다.
constructor 여러개.
1. String str1 = "Korea"; 2. String str2 = new String("Korea"); 3. char[] ch = new char[3]; ch[0] = 'a'; ch[1] = 'b'; ch[2] = '%'; 4. String str3 = new String(ch); 5. String str4 = new String(ch,1,2); //(배열, 위치, 개수) //offset : 현재 값을 기준으로 떨어진 거리 ch에서 하나 떨어진 거에서부터 두개의 문자열만 가져와라 ex) abcd --> bc
Methods
스트링 데이터에 있는 메소드들은 원본을 바꾸지는 못한다.(스트링은 불변객체다. Immutable)
- String.charAt(int index) //index 번째에 있는 캐릭터를 반환해준다.
- CharSequence // 그냥 문자열이라고 생각하면된다.
- str1.compareTo(str2);
- str1.compareToIgnoreCase(str2);
- str1.concat(str2); //str1에다 str2를 붙이는 것
- str1 = String.copyValueOf(charAray); //이런 식으로 사용, str1에 str2가 들어간다. str는 character 배열.
- str1.equals(str2 ) //contents가 같으면
- **str1.isEmpty(); **// str이 비었으면 true 리턴
- str1.startWith(string prefix); //str1이 prefix로 시작하면 T리턴. 아니면 F
- str1.indexOf(2); //x번째 인덱스에 있는 문자 리턴
- str1.lastIndexOf(??); // parameter안에 들어가있는 캐릭터가 str1에서 마지막으로 나타나는 인덱스를 리턴한다. 안 나타나면, -1
- str1.spilt(String rgx); // String[] str4= str1.split(“B”); 이런식으로 사용한다. B는 제거되고, 그 전 후 스트링들이 배열로 저장된다.(rgx가 구분자)
- str1.substring(int beginIndex); //부분 문자열
- str1.valueOf(char[] data);
- str1.replace(‘송’,’망’); // 송이 모두 망으로 바뀐다. 근데 원본 데이터를 바꾸진 않는다.
- String money = String.format(“%,d”, sum); //105,000 이런 식으로 나온다.
주소와 내용
String s1 = "korea";
String s2 = "korea";
String s3 = new String("korea");
System.out.println(s1==s2); //true
System.out.println(s1==s3);// false
//new를 통해서 만들어지는 애들의 영역은 heap영역에 있다.
String s1 = "korea";
String s2 = "korea";
s1="hello";
System.out.println(s1);
System.out.println(s2);
// hello, korea
StringBuffer
String 과 다른 점 : mutable이라서 바꿀 수 있다.
java.util - GregorianCalender
GregorianCalendar calendar = new GregorianCalendar();
System.out.println(calendar);
====================================RESULT==========================================
>>java.util.GregorianCalendar[time=1600231159053,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Seoul",offset=32400000,dstSavings=0,useDaylight=false,transitions=22,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2020,MONTH=8,WEEK_OF_YEAR=38,WEEK_OF_MONTH=3,DAY_OF_MONTH=16,DAY_OF_YEAR=260,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=1,HOUR_OF_DAY=13,MINUTE=39,SECOND=19,MILLISECOND=53,ZONE_OFFSET=32400000,DST_OFFSET=0]
대문자로 되어있는 변수는 스태틱 변수이다. 내가 가져올 수 있는 값. 다 public
API 문서엔 getter가 11개 밖에 없다. 그러나 아래 그림엔 굉장히 getter이 있다. 그 이유는,
아래와 같이 object와 calendar을 상속받았기 때문이다.
날짜
GregorianCalendar calendar = new GregorianCalendar();
System.out.println(calendar);
int y1 = calendar.get(Calendar.YEAR);
int m = calendar.get(Calendar.MONTH);
int d = calendar.get(Calendar.DATE);
이렇게하면? 현재 날짜는 2020년 9월 16일인데, 2020년 8월 16일이라고 뜬다. 왜냐면 월이 0~11월이라서.. 그래서 +1을 해줘야지 알맞게 나온다.
시간
int h = calendar.get(Calendar.HOUR);
int mI = calendar.get(Calendar.MINUTE);
int s = calendar.get(Calendar.SECOND);
요일
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
Calendar.SUNDAY == 1 //true
Calendar.SUNDAY 이 변수는 static final이다.
오늘은 수요일, 결과 값으로는 4가 찍힌다.
일 월 화 수 목 금 토
1 2 3 4 5 6 7
java.util - StringTokenizer
stk.countTokenizer stk = new StringTokenizer(words);
구분자를 특별히 넣어주지 않으면, 띄어쓰기가 구분자가 된다.
stk.countTokenizer stk = new StringTokenizer(words,”,”);
cf) split은 구분자 하나만 된다. 반면에 StringTokenizer은 여러개 가능한데
입력 폼이 신기하다. “ ,#” –> 이게 구분자 하나가 아니라 세개다. 띄어쓰기, 콤마, 샵 이렇게 세개
hasMoreTokens :
while(stk.hasMoreTokens()){
System.out.println(strk.nextToken());
}
System.out.println(stk.countTokens); //0이 나온다.
//큐같은 느낌. 먼저 들어간 데이터가 먼저 사라진다.
System.out.printf("총 사용 금액 : %,d", sum);
%,d 라고 하면, 세자리마다 숫자에 점을 찍어준다. 전 세계 공통
Integer
Integer.BYTES // 4 가 나옴. 인티저 공간 크기
Integer.MIN_VALUE // 32비트가 표현할 수 있는 가장 작은 값 (-2의 31승)
Integer.MAX_VALUE // 32비트가 표현할 수 있는 가장 큰 값(2의 31승-1)
Integer.toHextString(123); //16진수로 변환해준다.
//10진수 Decimal, 8진수 Octal, 16진수 Hex Decimal
Integer.parseInt("123");
StringBuffer
아래와 같은 스트링 연산은 객체를 버리고 생성하기 때문에 JVM 의 부담이 크다.
String temp = "사과";
temp = "나무";
string a = "사과";
a=a+"나무";
그러나 StringBuffer는 이러한 부담이 없다. 애초에 공간을 크게 만들어서 원본을 버리지 않게.
1.
StringBuffer sb = new StrinBuffer();
int capacity = sb.capacity();
//기본이 16바이트이다.기본용량이 충분히 크다.
2.
StringBuffer sb = new StrinBuffer("사과");
int capacity = sb.capacity(); //18바이트 나옴. 사과는 4바이트만 필요한데.
sb.append("포도"); //"사과포도"
sb.append("포도")
.append("감")
.append("복숭아"); //이런식으로 chaining 한다. 세줄이 한줄
capacity = sb.capacity(); // 18바이트이다. 무작정 늘리는게 아니라, 좀 찼을때 늘린다.
sb.toString // 이렇게해서 스트링 만든다.
Object
객체.getClass(); //무슨 클래스인지 알아낸다.