코딩/2-JAVA

C1001문자열, C1002문자열함수, C1003형변환, C1004문자열과데이터

tree0505 2025. 6. 27. 12:09
반응형
    • 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 . 주소 
    • 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