Jam's story
21일차 본문
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형 보다 더 큰 실수값을 다루는 자료형
오토박싱 : 기본형 ->래퍼 클래스 타입으로 형 변환 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]);
}
}
}
- Pattern 객체생성
- Matcher 객체생성
- 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