반응형
- C10문자열
- C1001문자열
- C1001개념01_문자열입력
package C1001문자열;
import java.util.Scanner;
public class C1001개념01_문자열입력 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("이름을 입력하세요 : ");
String name = scan.next();
//문자열은 스캐너 넥스트를 쓴다.
//넥스트는 스페이스가 안된다.
//int name = scan.nextInt(); //정수
//정수는 next.int를 섰다. => nextInt()
System.out.println("name = " + name);
scan.close();
}
}
- C1001개념02_문자열입력
package C1001문자열;
import java.util.Scanner;
public class C1001개념02_문자열입력 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("입력1 : ");
// scan.next ==> space 인식불가
String data = scan.next();
// next 뒤에 nextLine 을사용할경우 enter 값을 저장할 nextLine을 한번 더 적어준다.
scan.nextLine();
//스페이스바를 인식을 한다.
//문제 엔터도 무시를 한다. / 엔터를 쳐야 끊기는데. 무시함
System.out.println(data);
System.out.print("입력2 : ");
//scan.nextLine ==> space 인식
String data2 = scan.nextLine();
//결론적으로 넥스트라인을 쓰면 된다.
System.out.println(data2);
// 1) next와 nextLine을 동시에 사용하면 엔터가 먹힌는 경우가 발생된다.
// 2) 그럴경우 next 뒤에 아무내용없는 nextLine을 하나 적어준다.
scan.close();
}
}
- C1001개념03_문자열포맷
- 콘솔창에 보기 좋게 출력하기 위해 배우는것
- 웹에서는 쓸일이 없다.
package C1001문자열;
public class C1001개념03_문자열포맷 {
public static void main(String[] args) {
// 문자열은 +로 연결할 수 있다.
String menu = "";
menu += "======롯데리아=====";
menu += "\n"; //줄바꿈
menu += "1)햄버거 200원";
menu += "\n";
menu += "2)콜라 1200원";
menu += "\n";
menu += "3)감자튀김 1300원";
System.out.println(menu);
String[] name = { "aaa" , "bbbbbbbb" , "c"};
int[] total = { 271 , 200, 24};
double[] avg = new double[3];
for(int i = 0; i < 3; i++) {
avg[i] = (double)total[i] / 3;
}
//-------------------------------------------------------------
System.out.println("---------------------------------------");
// 오른쪽 정렬
for(int i = 0; i < 3; i++) {
System.out.printf("[%10s] [%5d] [%6.2f]",
//포멧 제공 . 줄마춤 할때 사용됨
//-를 안쓰면 오른쪽 정렬
//printf는 문자열이 출력됨. //println말고
//d는 정수
//f는 실수
//s는 문자
//10s => 공백을 10칸을 맞춰줌
//5d => 5칸 공백
//6.2f => 소수점 해서 6글자.
name[i] , total[i] , avg[i]);
System.out.println();
}
System.out.println("---------------------------------------");
//----------------------------------------------------------------
// - 는 왼쪽 정렬
for(int i = 0; i < 3; i++) {
System.out.printf("[%-10s] [%-5d] [%-6.2f]",
//-를 쓰면 왼쪽 정렬
//출력하고 끝남
name[i] , total[i] , avg[i]);
System.out.println();
}
System.out.println("---------------------------------------");
//------------------------------------------------------------
// String.format()은 단순 출력이 아닌 문자열로 저장하고 싶을 때 사용한다.
//printf랑 같은데. 변수에 저장이 된다.
String data = "";
for(int i = 0; i < 3; i++) {
//data에 저장이 가능하다. 문자에다가 저장한다.
data += String.format("[%-10s] [%-5d] [%-6.2f]",
name[i] , total[i] , avg[i]);
data +="\n";
}
System.out.println(data); //깔끔하게 출력할 수 있다.
}
}
- C1001개념04_문자열배열
package C1001문자열;
import java.util.Arrays;
public class C1001개념04_문자열배열 {
public static void main(String[] args) {
int[] arr = new int[3]; // 0
//int를 new를 하게되면 초기화를 0으로 한다.
double[] arr2 = new double[3]; // 0.0
//정수는 초기와. 0.0
String[] test = {"aaa" , "bbb" , "ccc"};
System.out.println(Arrays.toString(test));
// String 을 배열로 만들때 new 로 만들게되면
// null로 초기화 되어있다.
String[] temp = new String[3];
//문자열은 new를 하게 되면. null로 표시가 된다.
System.out.println(Arrays.toString(temp));
for(int i = 0; i < temp.length; i++) {
temp[i] = "";
}
//문자열은 "" 한번 삭 지워주어야 한다. / 그래야 깔끔히 지워진다.
System.out.println(Arrays.toString(temp));
}
}
- C1001개념05_향상된포문
package C1001문자열;
public class C1001개념05_향상된포문 {
public static void main(String[] args) {
String[] test = {"aaa" , "bbb" , "ccc"};
for(int i = 0; i < test.length; i++) {
//위처럼 쓰면 올드하다. 길다고 생각이 들음
String str = test[i];
System.out.println(str);
}
for(String str : test) {
//test가 배열이다.
//(int i = 0; i < test.length; i++)
//줄여서 쓴것
//str에 값이 담긴다.
System.out.println(str);
}
}
}
- C1002문자열함수
- C1002개념01_문자열비교
- 결론 문자열은 이퀄스를 쓰면 아무 문제가 없다.
- 시스템아웃은 heap영역에 저장 . 아직 사용자가 입력을 안해서 heap에 저장
- String name = "홍길동" 은 메모리 3영에에 저장
- 즉 2개는 주소가 다르다. 메모리가 서로 다른데 있으니까.
- 만들어지는 영역이 다르기 때문에
- 메모리 아끼기 위해서
package C1002문자열함수;
import java.util.Scanner;
public class C1002개념01_문자열비교 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String name = "홍길동";
//String도 어차피 배열이다.
//홍길동은 String영역에 저장이 된다. //전역
System.out.print("이름을 입력하세요 : ");
String myName = scan.next();
//힙 영역에 저장이 된다.
if(name == myName) {
//문자열 비교는 == 을 쓰면 안된다.
//메모리에 저장된 곳이 다르기 때문에.
//즉 주소가 다르기 때문에 불일치가 나온다.
System.out.println("== 연산자 : 일치");
}else {
System.out.println("== 연산자 : 불일치");
}
System.out.println(name.equals(myName));
if(name.equals(myName)) {
System.out.println("equals() 메서드 : 일치");
}else {
System.out.println("equals() 메서드 : 불일치");
}
scan.close();
}
}
- 문자열은 == 로 비교하면 안된다.
- String name = "홍길동";
- 이것도 배열이다.
- 메모리
- 1.
- 2. heap
- String myName = scan.next();
- 힙 영역에 저장이 된다.
- x2 . 주소
- String myName = scan.next();
- 3.
- String이라는 영역이 있다.
- String name = "홍길동";
- 홍길동은 스트링 영역에 저장이 된다. 전역
- 주소가 다르다. x1
- 컴파일이 읽을때.
- true로 뜬다.
- 3.
- 홍길동을 만든다.
- name2는 안 만든다.
- 주소가 같다. main
- C1002개념02_문자열비교
package C1002문자열함수;
/*
문자들은 기본적으로 숫자를 가지고있다.
compareTo는 빼기를 의미한다.
"a"가 숫자 97이라면 "b"는 98이다.
a에서 b를 뺀다면, 음수가 나올것이다.
*/
public class C1002개념02_문자열비교 {
public static void main(String[] args) {
String str1 = "가";
String str2 = "나";
//문자열을 대소비교를 할때는 컴페어투를 쓰면 된다.
int rs1 = str1.compareTo(str2);
System.out.println(rs1); // 음수
int rs2 = str2.compareTo(str1);
System.out.println(rs2); // 양수
String str3 = "가";
int rs3 = str1.compareTo(str3);
System.out.println(rs3); // 0
}
}
- C1002개념03_문자열함수
package C1002문자열함수;
import java.util.Arrays;
public class C1002개념03_문자열함수 {
public static void main(String[] args) {
// 012345678
String str = "itacademy";
// 1. 문자열의 길이 : length()
int[] arr = {10, 20, 30};
System.out.println("배열의 길이 = " + arr.length);
System.out.println("문자열의 길이 = " + str.length());
int size = str.length();
// 2. 문자 한 개 추출(인덱싱) : charAt(index)
char ch = str.charAt(0);
System.out.println(ch);
ch = str.charAt(str.length() - 1);
// ch = str.charAt(8);
System.out.println(ch);
// 3. 문자 여러개 추출(슬라이싱)
// 1) substring(index1, index2)
// index1 <= 문자열 < index2
String rs = str.substring(2, 9);
System.out.println(rs);
// 2) substring(index)
// index부터 문자열의 맨 끝까지~
rs = str.substring(2);
System.out.println(rs);
// 4. split(구분자 문자) : 구분자로 잘라내어 배열에 저장
str = "서울시,송파구,1234";
String[] temp = str.split(",");
System.out.println(Arrays.toString(temp));
// 5. trim() : 앞뒤 공백 제거
String str1 = " Hello Java! ";
// 가운데 공백은 제거 안됨
str1 = str1.trim();
System.out.println("[" + str1 + "]");
// 6. replaceAll("기존단어","대체단어") : 문자열 변경
str1 = str1.replaceAll("Java", "JSP");
System.out.println(str1);
String str2 = "a b c d";
str2 = str2.replaceAll(" ", "");
System.out.println(str2);
}
}
- C1002개념04_스필릿구현
package C1002문자열함수;
import java.util.Arrays;
/*
[문제]
split() 메서드는 자동으로 문자열을 배열로 만들어준다.
이 메서드를 사용하지 않고 직접 잘라서 배열에 저장해보자.
[정답]
[aaa, bbbb, ccc]
*/
public class C1002개념04_스필릿구현 {
public static void main(String[] args) {
String str = "aaa/bbbb/ccc";
int count = 0;
for(int i=0; i<str.length(); i++) {
if(str.charAt(i) == '/') {
count += 1;
}
}
String[] arr = new String[count + 1];
// "aaa/bbbb/ccc"
/*
i = 0 unit = "" + "a"
i = 1 unit = "a" + "a"
i = 2 unit = "aa" + "a"
i = 3
index = 0
arr = ["aaa", null, null]
index = 1
unit = ""
i = 4 unit = "" + "b"
i = 5 unit = "b" + "b"
i = 6 unit = "bb" + "b"
i = 7 unit = "bbb" + "b"
i = 8
index = 1
arr = ["aaa", "bbbb", null]
index = 2
unit = ""
...
*/
String unit = "";
int index = 0;
for(int i=0; i<str.length(); i++) {
if(str.charAt(i) == '/') {
arr[index] = unit;
index += 1;
unit = "";
} else {
unit += str.charAt(i);
}
}
arr[index] = unit;
System.out.println(Arrays.toString(arr));
}
}
- 함수를 직접 만들기
- 회사에서는 프레임 워크를 많이 쓴다.
- 프레임워크중 없는 기능도 있다.
- 그러면 자신이 만들어야 한다.
- 스플릿이 없을 수도 있다.
- C1003형변환
- C1003개념01_형변환
package C1003형변환;
/*
# 형변환(type conversion)
- 자료형(data type)을 바꾸는 것을 의미
*/
public class C1003개념01_형변환 {
public static void main(String[] args) {
// 1. 기본 자료형 형변환하는 방법 : (자료형)변수
// * 문자 -> 숫자
// 글자도 사실 숫자로 되어있다.
//char는 int로 바꿀 수 있다.
char ch = 'a';
int chNum = (int)ch;
System.out.println(chNum); // 97
ch = (char)(chNum + 1);
System.out.println(ch); // b
// 2. 문자열 형변환하는 방법 : 특수함수를 사용해야한다.
// * 문자열 -> 숫자
String strNum = "10";
int num = Integer.parseInt(strNum);
System.out.println(num + 1); // 11
// * 숫자 -> 문자열
// 방법1) 꼼수 =>""
strNum = num + "";
System.out.println(strNum + 1); // 101
// 방법2) 정식
strNum = String.valueOf(num);
System.out.println(strNum + 1); // 101
}
}
- C1003개념02_형변환
package C1003형변환;
import java.util.Arrays;
/*
[문제]
scoreList배열의 값을 콤마(,)를 구분자로
data 문자열에 연결하시오.
단, 내림차순으로 정렬하여 연결하시오.
[정답]
data = 54,43,32,12
*/
public class C1003개념02_형변환 {
public static void main(String[] args) {
int[] scoreList = {12, 32, 54, 43};
String data = "";
for(int i=0; i<scoreList.length; i++) {
int maxScore = scoreList[i];
int maxIndex = i;
for(int j=i; j<scoreList.length; j++) {
if(maxScore < scoreList[j]) {
maxScore = scoreList[j];
maxIndex = j;
}
}
int temp = scoreList[i];
scoreList[i] = scoreList[maxIndex];
scoreList[maxIndex] = temp;
}
System.out.println(Arrays.toString(scoreList));
// [54, 43, 32, 12]
/*
data = data + scoreList[i]
i = 0 data = "" + 54 = "54"
data = "54" + "," = "54,"
i = 1 data = "54," + 43 = "54,43"
data = "54,43" + "," = "54,43,"
i = 2 data = "54,43," + 32 = "54,43,32"
data = "54,43,32" + "," = "54,43,32,"
i = 3 data = "54,43,32," + 12 = "54,43,32,12"
*/
for(int i=0; i<scoreList.length; i++) {
data += scoreList[i];
if(i < scoreList.length - 1) {
data += ",";
}
}
System.out.println(data);
}
}
- C1004문자열과데이터
- C1004개념01_문자열데이터
package C1004문자열과데이터;
public class C1004개념01_문자열데이터 {
public static void main(String[] args) {
String[][] data = {
{"1001" ,"김철수" , "10"},
{"1002" ,"이만수" , "60"},
{"1003" ,"김성수" , "90"},
{"1004" ,"오지호" , "55"},
};
for(int i = 0; i < data.length; i++) {
System.out.println(data[i][0] + " " + data[i][1] + " " + data[i][2]);
}
System.out.println("---------------------------------------------------");
System.out.println("점수가 60점이상인 [학생번호 이름 점수] 출력 : ");
for(int i = 0; i < data.length; i++) {
int score = Integer.parseInt(data[i][2]);
if(score >= 60) {
System.out.println(data[i][0] + " " + data[i][1] + " " + data[i][2]);
}
}
System.out.println("---------------------------------------------------");
System.out.println("시험문제중 1문제가 전부 정답처리되었다. 학생들 점수를 5점씩 인상하시오");
for(int i = 0; i < data.length; i++) {
int score = Integer.parseInt(data[i][2]);
//문자이기때문에 정수로 바꿈
score += 5;
data[i][2] = score + "";
//다시 문자로 바꿈
}
for(int i = 0; i < data.length; i++) {
System.out.println(data[i][0] + " " + data[i][1] + " " + data[i][2]);
}
}
}
반응형
'코딩 > 2-JAVA' 카테고리의 다른 글
C1101클래스 (0) | 2025.06.30 |
---|---|
C1005파싱 , C1006입력 (1) | 2025.06.27 |
C0911어레이리스트 (0) | 2025.06.27 |
C0910이차배열입력 (0) | 2025.06.27 |
C0909이차배열과데이터 (0) | 2025.06.27 |