- String의 특징. 기본 데이터형이 아닌, 클래스형이다. (클래스형은 대문자로 시작) 클래스는 객체와 메소드를 가지고 있다 . (StringTest, StringTest02, StringTest03)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
package utilTest;
public class StringTest {
public static void main(String[] args) {
//String은 클래스형. 기본데이터형이 아님. 클래스는 대문자로 시작.
//클래스형은 new 로 객체를 만든다. 그런데 지금까지 String i=oo; 이런식으로 선언했었다.
//어떻게 가능했던 걸까?
//클래스는 주소값을 가지니까 str에는 100이란 주소값을 가지고 있고 출력할때 100이 가리키는 안녕이라는 값을 출력하는것.
//==는 주소가 맞는지 물어본다. 그래서 str과 str1은 주소가 같기에 같다고 출력되고
//equals는 내용이 맞는지 물어본다. 그래서 str과 tmp는 내용이 같기에 같다고 출력된다.
String str="안녕";
String str1="안녕";
String tmp=new String("안녕");
if(str==str1) {
System.out.println("str==str1 주소 같다");
}else {
System.out.println("str==str1 주소 다르다");
}
if(str==tmp) {
System.out.println("str==tmp 주소 같다");
}else {
System.out.println("str==tmp 주소 다르다");
}
if(str.equals(str1)) {
System.out.println("str equals str1 내용 같다");
}else {
System.out.println("str equals str1 내용 다르다");
}
if(str.equals(tmp)) {
System.out.println("str equals tmp 내용 같다");
}else {
System.out.println("str equals tmp 내용 다르다");
}
str=str+str1;
//안녕안녕이 str에 담긴다. 원래있던 str의 안녕은 사라지고, 주소값도 달라진다.
//String은 정적 클래스. 내용 수정이 불가하다.
//동적클래스를 사용하는게 낫다. String Builder 혹은 String Buffer.
if(str==str1) {
System.out.println("주소 같다");
}else {
System.out.println("주소 다르다");
}
}
}
|
+ String클래스에 속한 함수들
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
package utilTest;
public class StringTest02 {
public static void main(String[] args) {
String str="안녕하세요 Hello 지금은 자바 공부중!!!";
System.out.println("str 길이: "+str.length()); //문자열의 길이
System.out.println("H위치: "+str.indexOf('H'));
System.out.println("H위치: "+str.indexOf("Hello")); //문자가 시작되는 위치
System.out.println("4번째 문자의 위치: "+str.charAt(4));
String tmp="열심히 합시다";
System.out.println("str과 tmp 연결: "+str+tmp);
System.out.println("str과 tmp 연결: "+str.concat(tmp));
int value=7;
System.out.println("str과 value 연결: "+str+value);
//System.out.println("str과 value 연결: "+str.concat(value));
//concat안에는 String형이 들어가야하는데 value는 int형.
//String의 함수가 static으로 만들어졌기 때문에 클래스 이름으로 접근가능.
//valueof를 통해 int형을 String형으로 변환.
String s=String.valueOf(value);
System.out.println("str과 value 연결: "+str.concat(s));
System.out.println("tmp와 value 연결: "+tmp.concat(String.valueOf(value)));
String msg="abcdefg";
System.out.println(msg.toUpperCase());
System.out.println(msg.toUpperCase().toLowerCase());
String[]arr=str.split(" ");
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]);
}
System.out.println(arr.length);
}
}
|
+String의 길이(문자열)를 출력, 그 문자열을 공백으로 구분하여 배열의 길이 출력, 16진수와 8진수로 변환하는 메소드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
package utilTest;
public class StringTest03 {
public static void main(String[] args) {
String tmp="1 0 15 23 6 21 17 10 11 12 13 14";
//tmp의 길이를 출력. 문자열의 길이.
System.out.println("tmp의 길이: "+tmp.length());
//tmp를 공백으로 구분하여 배열의 길이 출력
String []arr=tmp.split(" ");
System.out.println("arr의 길이: "+arr.length);
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]+"\t");
}System.out.println("====");
//16진수
//Integer라는 클래스에 toHexString을 쓰면 16진수로 바꿔준다.
System.out.println(Integer.toHexString(15));
/*
arr배열안에 있는 숫자를 16진수로 변경
문자를 숫자로 바꾸는 메소드 parseInt를 사용해야
정수만 인수로 받는 toHexString을 통해 16진수로 변환시킬 수 있다.
*/
String oct="";
String hex="";
for(int i=0;i<arr.length;i++) {
int v=Integer.parseInt(arr[i]);
oct+=Integer.toOctalString(v)+"\t";
hex+=Integer.toHexString(v).toUpperCase()+"\t";
}
System.out.println("8진수: "+oct);
System.out.println("16진수: "+hex);
}
}
|
cs |
- 자바 API 중 Calendar 함수를 사용하여 현재 시각 출력하기 (CalendarTest)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
package utilTest;
import java.util.Calendar;
public class CalendarTest {
//static으로 된 함수는 static으로만 부를 수 있다.
public static void printCalendar(String msg, Calendar cal) {//now는 Calendar형
//년,월,일 출력
int year=cal.get(Calendar.YEAR); //년
int month=cal.get(Calendar.MONTH)+1; //0부터 되어있기 때문에 현재의 월을 출력하려면 +1.
int day=cal.get(Calendar.DAY_OF_MONTH); //일
System.out.println(year+"/"+month+"/"+day);
//요일
System.out.println(cal.get(Calendar.DAY_OF_WEEK)); //일요일부터 센다.
int d=cal.get(Calendar.DAY_OF_WEEK);
String yul="";
switch(d) {
case Calendar.SUNDAY : yul="일"; break;
case Calendar.MONDAY : yul="월"; break;
case Calendar.TUESDAY : yul="화"; break;
case Calendar.WEDNESDAY : yul="수"; break;
case Calendar.THURSDAY : yul="목"; break;
case Calendar.FRIDAY : yul="금"; break;
case Calendar.SATURDAY : yul="토"; break;
}
System.out.println("요일: "+yul);
System.out.println(Calendar.SUNDAY); //1
int ampm=cal.get(Calendar.AM_PM);
String ampmStr="";
/*
if(ampm==Calendar.AM) {
ampmStr="오전";
}else {
ampmStr="오후";
}
*/
ampmStr=(ampm==Calendar.AM)? "오전":"오후";
int h=cal.get(Calendar.HOUR);
int m=cal.get(Calendar.MINUTE);
int s=cal.get(Calendar.SECOND);
System.out.println("현재시각: "+ampmStr+" "+h+":"+m+":"+s);
}
public static void main(String[] args) {
Calendar now=Calendar.getInstance();
CalendarTest.printCalendar("현재", now);
}
}
|
- StringBuilder사용하여 문자열 출력하기 (StringBuilderTest)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
package utilTest;
public class StringBuilderTest {
public static void main(String[] args) {
String str="string";
//StringBuilder는 문자를 동적으로 받기때문에 출력, 삭제 등이 간편
StringBuilder sb=new StringBuilder(str);
System.out.println(sb);
sb.append("자바"); //맨 뒤에 문자 삽입
System.out.println(sb);
sb.insert(2, "oracle"); //위치를 지정하여 문자 삽입
System.out.println(sb); //storaclering자바
System.out.println(sb.toString()); //toString은 문자로 바꾼다.
sb.delete(2, 5);
System.out.println(sb); //인덱스 2앞에 커서가 있다고 생각. o,r,a가 없어짐. stclering자바
sb.reverse();
System.out.println(sb); //문자열 거꾸로 출력
System.out.println(sb.charAt(3)); //3번째 있는 문자 출력
System.out.println(sb.substring(3)); //문자 추출: 인덱스 3번째부터 끝까지 출력
System.out.println(sb.substring(3,5)); //3에서 부터 5전까지 출력.
}
}
|
cs |
- 입력한 문장의 길이만큼 반복하여 첫번째 글자를 맨뒤에 붙여서 출력하기. (StringTest04)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package utilTest;
import java.util.Scanner;
public class StringTest04 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("문장입력>>");
String line=sc.nextLine();
//문장의 길이만큼 반복
for(int i=0;i<line.length();i++){
//첫글자 구하기
//String first=line.substring(0,1);
char first=line.charAt(0);
//두번째부터 끝까지 구하기
String second=line.substring(1);
//2+1하기
line=second+first;
System.out.println(line);
}
}
}
|
- key와 value로 구성된 HashMap (HashMapTest)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
package utilTest;
import java.util.HashMap;
public class HashMapTest {
public static void main(String[] args) {
//Key와 Value로 구성된 Map이란 자료구조.
HashMap<String, String> hm=new HashMap<String, String>();
//Map에 저장하는 명령어는 put.
//순서는 중요하지 않고 값만 돌려줌.
hm.put("one", "첫번째");
hm.put("two", "두번째");
hm.put("three", "세번째");
hm.put("four", "네번째");
System.out.println(hm);
System.out.println(hm.size()); //크기는 length가 아닌 size();
hm.put("one", "첫번째 one"); //키가 중복되면 허용하지 않고 덮어쓰기가 된다.
System.out.println(hm);
System.out.println(hm.size());
System.out.println(hm.get("two")); //두번째. get의 인수로 키를 적으면 value값을 알려줌.
hm.put("1","새로넣음");
System.out.println(hm);
//key의 값을 출력하려면 keySet()함수 이용.
for(String s:hm.keySet()) {
System.out.println(s);
}
//value값을 출력하려면 get()함수 이용
for(String s:hm.keySet()) {
System.out.println(hm.get(s));
}
System.out.println(hm.containsKey("1")); //true. key값에 1이 있는지 물어봄
System.out.println(hm.containsValue("두번째")); //true. value값에 두번째가 있는지 물어봄
//value값을 출력하는 또다른 함수 values()
for(String s:hm.values()) {
System.out.println(s);
}
}
}
|
- HashMap에 key와 value를 넣고 id과 비번이 일치하는지 출력하기 (HashMapTest02)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
package utilTest;
import java.util.HashMap;
import java.util.Scanner;
public class HashMapTest02 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
HashMap<String, String> map=new HashMap<String, String>();
map.put("java", "1111");
map.put("oracle", "1234");
map.put("jsp", "abcd");
System.out.println("ID를 입력하세요");
String id=sc.nextLine();
System.out.println("패스워드를 입력하세요");
String pw=sc.nextLine();
if(map.containsKey(id)==false) { //id가 없음
System.out.println("ID 존재 안함");
}
//get(key)이 가리키는 value값과 pw가 일치하는지 물어봄.
else if(map.get(id).equals(pw)==false) {//비번오류
System.out.println("비번 일치 하지 않음");
}
else {
System.out.println("ID/PWD 일치");
}
}
}
|
- 1부터 20사이의 난수 10개를 map에 넣으시오. 키 값은 1~10, value값은 1~20사이 난수. 중복된 난수를 허용하지 않는다. map의 values 값들을 작은 값부터 정렬-Collection.sort()(Test01)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
package utilTest;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test01 {
public static void main(String[] args) {
//1부터 20사이의 난수 10개를 map에 넣으시오
//키 값은 1~10, value값은 1~20사이 난수
//단 중복된 난수는 허용하지 않는다.
Map<Integer, Integer> map=new HashMap<Integer, Integer>();
for(int i=1;i<11;i++) {
while(true) {
int value=(int)(Math.random()*20)+1; //1에서 20사이
if(!map.containsValue(value)) {
//map.containsValue(value)==false와 같은말
//value가 없으면 value값에 넣으란 소리.
//중복된 게 있으면 키값도 삭제해버리니까 while문을 쓰는게 좋음
map.put(i,value);
break;
}
}
}
for(Integer i:map.values()) {
System.out.print(i+"\t");
}
System.out.println();
System.out.println(map);
System.out.println();
//map에 들어있는 value값들을 Integer형 ArrayList에 담는다.
List<Integer>list=new ArrayList<Integer>(map.values());
//작은값부터 정렬한다.
Collections.sort(list);
for(int i:list) {
System.out.print(i+"\t");
}
}
|
- 문장의 한글자마다 2씩 더하여 암호화 하고 다시 2씩 빼서 복호화하여 출력하기 (EncTest)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
package utilTest;
public class EncTest {
public String encrypt(String msg) {
String dap="";
for(int i=0;i<msg.length();i++) {
//공백이면. 한글자이기 때문에 char.''홑따옴표
if(msg.charAt(i)==' ') {
dap+=msg.charAt(i);
}else {
dap+=(char)(msg.charAt(i)+2); //누적시키기위해 +=.
}
}
return dap;
}
public String decrypt(String str1) {
String bok="";
for(int i=0;i<str1.length();i++) {
//공백이면. 한글자이기 때문에 char.''홑따옴표
if(str1.charAt(i)==' ') {
bok+=str1.charAt(i);
}else {
bok+=(char)(str1.charAt(i)-2); //누적시키기위해 +=.
}
}
return bok;
}
public static void main(String[] args) {
EncTest enc=new EncTest();
String msg="Hi..Glad to meet you!!";
System.out.println("암호화 전: "+msg);
//한 문자에 2씩 더하기
String str1=enc.encrypt(msg);
System.out.println("암호화 후: "+str1);
System.out.println("복호화 후: "+enc.decrypt(str1));
}
}
|
+StringBuilder를 활용하여 똑같이 재현하기 (EncBuilderTest)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
package utilTest;
public class EncBuilderTest {
private StringBuilder encrypt(String msg) {
StringBuilder sb=new StringBuilder();
for(int i=0;i<msg.length();i++) {
if(msg.charAt(i)==' ') {
sb.append(msg.charAt(i));
}else {
sb.append((char)(msg.charAt(i)+2));
}
}
return sb;
}
private StringBuilder decrypt(String msg) {
StringBuilder sb=new StringBuilder();
for(int i=0;i<msg.length();i++) {
if(msg.charAt(i)==' ') {
sb.append(msg.charAt(i));
}else {
sb.append((char)(msg.charAt(i)-2));
}
}
return sb;
}
public static void main(String[] args) {
EncBuilderTest eb=new EncBuilderTest();
String msg="Hi..Glad to meet you!!";
System.out.println("암호화 전: "+msg);
//한 문자에 2씩 더하기
String str1=eb.encrypt(msg).toString(); //문자로 바꾸는 toString();
System.out.println("암호화 후: "+str1);
System.out.println("복호화 후: "+eb.decrypt(str1));
}
}
|
-
해쉬맵 map을 생성, 단어를 입력받아 단어와 입력 횟수 저장, 대소문자 구분없이 x치면 종료. map을 출력하기. map에 키값에 해당하는 단어가 있으면 values 수에 1을 더하고 단어가 없으면 1을 추가한다. (HashMapTest)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
package utilTest;
import java.util.HashMap;
import java.util.Scanner;
public class HashMapTest03 {
public static void main(String[] args) {
/* 1.해쉬맵 map을 생성
* 2.단어를 입력받아 단어와 입력 횟수 저장
* 3.대소문자 구분없이 x치면 종료.
* 4.map출력
*/
HashMap<String, Integer>map=new HashMap<String, Integer>();
Scanner sc=new Scanner(System.in);
while(true) {
System.out.println("단어를 입력하세요. 종료 x>>");
String word=sc.nextLine();
if(word.toLowerCase().equals("x")) break;
if(map.containsKey(word)) { //map에 단어가 있으면 그 수에 1더하기
map.put(word,map.get(word)+1);
}else { //map에 단어가 없으면 1추가
map.put(word,1);
}
}System.out.println(map);
}
}
|