Jam's story

21일차 본문

Java

21일차

애플쩀 2022. 3. 18. 16:51

 

replaceAll(정규표현식, 바꿀문자열) replaceFirst(정규표현식, 바꿀문자열 ) 

홍길동 -> 함세강 

	int findIndex = str1.indexOf("홍길동");
		int index = findIndex + "홍길동".length();
		String before = str1.substring(0, findIndex);
		String after = str1.substring(index);
		str1 = before + "함세강" + after;
		System.out.println(str1);

안녕하세요 입니다 로 바꾸기 

		int findIndex = str1.indexOf("홍길동");
		int index = findIndex + "홍길동".length();
		String before = str1.substring(0, findIndex);
		String after = str1.substring(index);
		str1 = before + "함세강" + after;
		System.out.println(str1);

		String str2 = str1.replace("함세강", " ");
		System.out.println(str2);
StringBuffer
//삭제
int start=sb.indexOf("홍길동");
int index=start+"홍길동".length();
System.out.println(sb.delete(start, index));

//수정 
System.out.println(sb.replace(start, index, "함세강"));

 

문자열이 자주 변경되면 String X
StringBuffer 
StringBuilder- 스레드에 안전하다( 동기화 처리되어있다. )
둘이 기능은 똑같다. 

 

처리 시간 확인 함수 
System.nanoTime();

 

public static void testString() {
//현재 시간 밀리세컨드= 1/1000초 
System.currentTimeMillis();
long start=System.nanoTime();  // nano=1/1000초
for(int i=0; i<200000; i++) {

}
long end=System.nanoTime();
System.out.println("처리시간: "+(end-start));
}

 

 

Ctrl+Alt+Del 작업관리자 

 

 

 

StringBuffer 사용하여 문제풀기 
package days21;

/**
 * @author 지민
 * @date 2022. 3. 18. - 오전 11:09:57
 * @subject 
 * @content 
 * 
 */
public class Ex01_05 {
public static void main(String[] args) {
	/*
	 * 
	 * 길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, 
	 * solution을 완성하세요. 
	 * 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.
	 * 
	 * 
	 * */
	Solution s=new Solution();
	long start=System.nanoTime();
	String answer=s.solution(10000);
	long end=System.nanoTime();
	System.out.println("처리시간: "+(end-start)+"ns"); // 26898800ns
	System.out.println(answer);
}
}

class Solution {
    public String solution(int n) {
      
/*   String answer = "";       
 * for(int i=0; i<=n; i++) {
 * 
        	if(i%2==1) {
        		answer+="수";
        	}else {
        		answer+="박";
        	}
        }
        return answer;*/
        
        StringBuffer answer=new StringBuffer(" ");
        for(int i=0; i<=n; i++) {
        
        	        	if(i%2==1) {
        	        		answer.append("수");
        	        	}else {
        	        		answer.append("박");
        	        	}
        	        }
        	        return answer.toString();
    }
}

더 좋은 코드 

   StringBuffer answer=new StringBuffer(" ");
        
        for(int i=1; i<=n/2; i++) {
        	answer.append("수박");
        	if(n%2!=0) {
        		answer.append("수");
        	}
        }
        	        return answer.toString();
   
    }

더 좋은코드2) 

클래스 객체 생성하지말고, 메소드에 static을 붙여서 클래스 이름으로 접근 

 

더 좋은 코드3) 

main함수에 함수를 구현하여, 바로 함수 호출 

 

구분자로 자르기 

	
	StringTokenizer st=new StringTokenizer(str,",");
	System.out.println(st.countTokens()); //몇개의 토큰이 만들어졌는지 
	// 다음 토큰을 반환 --> st.nextToken(); 리턴값은 스트링 
	// 가져올 토큰이 남아 있니 ?  ->st.hasMoreTokens()
	while(st.hasMoreTokens()) {
		System.out.println(st.nextToken());
	}

 

Math 클래스 
  • 자주 사용되기 때문에 static 멤버 (필드, 메서드)  객체생성x
  • 수학계산과 관련된 메서드 
  • 필드 2개 
public class Ex04 {
public static void main(String[] args) {
	
	System.out.println(Math.random());
	System.out.println(Math.abs(-10));
	System.out.println(Math.max(2, 5));
	System.out.println(Math.min(2,6));
	System.out.println(Math.pow(2, 3));
	System.out.println(Math.sqrt(4));
	
	// 올림 (절상) 버림(절삭) 반올림 
	//소수점 첫번째자리 
	//올림 -double 
	System.out.println(Math.ceil(23.2352)); 
	//버림 -double
	System.out.println(Math.floor(23.23423));
	//반올림 - int형
	System.out.println(Math.round(23.534));
}
}
총 페이지 수 계산 

래퍼클래스

기본형 값들을 객체로 변환하여 작업을 수행할때

parseInt 랑 valueOf의 차이점
	//숫자, 진수
	int n=Integer.parseInt("100");
	int n1=Integer.parseInt("100",2);
	int n2=Integer.parseInt("12",8);
  • BigInteger= long형보다 더 큰 정수 값의 범위를 다루는 자료형 
  • BigDecimal =double형 보다 더 큰 실수값을 다루는 자료형 

 

parseInt가 가장 많이쓰임&amp;nbsp;

 

오토박싱 : 기본형 ->래퍼 클래스 타입으로 형 변환 Integer j = i;클래스 = 기본형 자동형변환 ( 오토 박싱 ) // 오토언박싱: 래퍼 클래스 객체 -> 기본형으로 자동 형변환 

 

 

리턴자료형 -Object 모든 타입을 리턴하겠다 .
매개변수- Object 모든 타입을 매개변수로 받겠다. 
Arrays.toString(배열이름 ) 
Arrays.fill ( 배열이름, 수) 
그 배열을 지정한 수로 채운다. 
배열에 해당하는 것 인덱스 찾기 Arrays.binarySearch()

Arrays.sort()로 오름차순 정렬 후에 사용해야함 

 

오름차순정렬 -Arrays.sort ()  정렬 
내림차순정렬 -Arrays.sort( 배열명, Collections.reverseOrder());  int형은 안되고 integer로 배열 바꿔야함  
  Integer [] m= {3,5,2,4,1}; //배열을 다루는 기능이 구현된 클래스 Arrays 크ffotm //1.배열출력- 확인
		  System.out.println(Arrays.toString(m)); 
		  //같은수로 채우기 
		  Arrays.fill(m, -1); 
		  System.out.println(Arrays.toString(m));
		  System.out.println(Arrays.binarySearch(m, 4));
		  
		  Arrays.sort(m);//오름차순 정렬 
		  System.out.println(Arrays.toString(m)); 
		  //내림차순
		  Arrays.sort(m,Collections.reverseOrder( ));
		  System.out.println(Arrays.toString(m));

 

if(p!=null) { 
// if(!Object.isNull(p))
// if(Object.nonNull(p))
  System.out.println(p.getX());
Random()
	long seed=System.nanoTime();
	Random rnd=new Random(seed);
	int bound=101;
	int b=rnd.nextInt(bound); //0<정수<100
	System.out.println(b);
	
	boolean c=rnd.nextBoolean();
	System.out.println(c);

 

 

경로 가져오기 - System.getProperty("user.dir")
	String 기준경로=System.getProperty("user.dir");	
	System.out.println(기준경로);
    
String path=String.format("%s\\src\\%s", System.getProperty("user.dir"),fileName);
package days21;

import java.io.FileReader;
import java.util.Arrays;

/**
 * @author kenik
 * @date 2022. 3. 18. - 오후 3:14:10
 * @subject p 502 예제 9-28 
 * @content   3:18 코딩
 */
public class Ex09 {

	public static void main(String[] args) {
		//  String.repeat();  JDK 11 버전~  ***
		//  문제)
		// days20.Ex01.java읽어서 
		// 알파벳 
		// A 25
		// B 11
		// 배열에 저장해서 막대그래프 그리기..
		
		String fileName = "days20\\Ex01.java";
		// 경로
		//    ㄴ 절대경로   C:\\temp\\test\\abc.txt
		//     ㄴ 상대경로 :   기준 (    .      C:\SS16Class5\JavaClass\javaPro  )
		//String 기준경로 =  System.getProperty("user.dir");
		//System.out.println(기준경로);
		
		String path = String.format("%s\\src\\%s"  
				                                    ,  System.getProperty("user.dir")
				                                                        , fileName);
		
		// C:\SS16Class5\JavaClass\javaPro\src\days20\Ex01.java
		// System.out.println( path );
		
		int [] counter = new int[26]; // A a [0]         Z   z [25]
		//                                                65 97             90 122 
		char one;  // 
		int code;
		
		// try-with-resources 문
		try (
				FileReader fr = new FileReader( path );
				){
			while(  ( code = fr.read() )  !=  -1 ) {
				// System.out.printf("%d - %c\n", code, (char)code);
				//                     Character.isAlphabetic(code)
				if(  'A' <=  code && code <= 'Z'   ||   'a' <=  code && code <= 'z' ) {
					 code =  Character.toUpperCase(code);  // 65 ~ 90
					 counter[code-65]++; 
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}		
		System.out.println(  Arrays.toString(  counter ) );
		
		// 막대 그래프
		for (int i = 0; i < counter.length; i++) {
			System.out.printf("[%c] : %s(%d)\n",  i+65 , printBarGraph('*', counter[i]) , counter[i]);
		}
		
		// [단어 갯수 파악 가능 ]
		// String  5
	} // main
	
	// printBarGraph('*', 10)  **********
	public static String printBarGraph( char style, int length ) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < length; i++) {
			sb.append(style);
		}
		return sb.toString();
	}

} // class

//   com.util.Rnd.java

 

Rnd.fillRand( 배열이름, 시작수 ,끝수 ) ;  

 

matches 
public class Ex11 {
public static void main(String[] args) {
//	java.util.regex.Matcher;
//	java.util.regex.Pattern;
	String [] data = {"bat","baby","bonus","cA","ca","co", "c."
            , "c0", "car", "combat", "count", "date", "disc"};
	
	//String regex="c[a-z]"  -> c+소문자인 2개글자 => co , ca
	// regex="c" ->c로 시작하는 모든 글자  
	String regex="c[a-z]*";
	for(int i=0; i<data.length; i++) {
		if(data[i].matches(regex)) System.out.println(data[i]);	
	}
}
}
  1. Pattern 객체생성
  2. Matcher 객체생성
  3. matches() 메소드 
	Pattern p= Pattern.compile(regex);
	for(int i=0; i<data.length; i++) {		 
		//패턴객체와 일치하는 지 체크하는 Matcehr 객체 m
		Matcher m=p.matcher(data[i]);
		if(m.matches()) System.out.println(data[i]);
	  }

 

public class Ex11_02 {

	public static void main(String[] args) {
		// 수업 종료 후 주말 코딩.
		// p506
				String [] data = {"bat","baby","bonus","c", "cA","ca","co", "c." , "c0", "c#", "car", "combat", "count", "date", "disc"};
				// p507 표9-11 (꼭 이해하기)
				String [] pattern = { ".*", "c[a-z]*","c[a-z]","c[a-zA-z]", "c[a-zA-z0-9]","c.","c.*","c\\.","c\\w", "c\\d", "c.*t", "[b|c].*", ".*a.*",".*a.+","[b|c].{2}"
				}; 
				
				for (int x = 0; x < pattern.length; x++) {
					Pattern p = Pattern.compile(pattern[x]);
					System.out.print("Patterm :" + pattern[x] + " 결과 : ");
					for (int i = 0; i < data.length; i++) {
						Matcher m = p.matcher(data[i]);
						if (m.matches()) {
							System.out.print(data[i]+",");
						}
						System.out.println();
					}
				}

	} // main

} // class
	
		//1.
		String source="011-1111-1111";
		String pattern="0\\d{1,2}-\\d{3,4}-\\d{4}";
		System.out.println(source.matches(pattern));
		
		//2.
		Pattern p= Pattern.compile(pattern);
		Matcher m=p.matcher(source);
		System.out.println(m.matches());

 

'Java' 카테고리의 다른 글

정규표현식 -java.util.regex 패키지  (0) 2022.03.20
Random 클래스  (0) 2022.03.19
21일차 시험  (0) 2022.03.18
20일차  (0) 2022.03.17
19일차  (0) 2022.03.16
Comments