레이블이 JAVA인 게시물을 표시합니다. 모든 게시물 표시
레이블이 JAVA인 게시물을 표시합니다. 모든 게시물 표시

2015년 4월 9일 목요일

java text 파일 입출력 하는 방법

자바에서 정말 간단한 파일 입출력 형태 이걸 그대로 쓰는 경우는 없고
감 안떨어지게 하려고 문제 사이트에서 문제 풀때에나 쓰거나 그렇거나 그러함
하지만 db도 없는 단말 환경이라면 임시방편으로 쓰기위해 한번쯤은 볼수도...
!!! db가 안되는 환경이라면 이 글도 못보겠......
여기에 대한 자세한 설명 및 이해는 아래 링크를 참고

읽을때 파일이 없을시 exception 떨구지 않고 자연스럽게 체크 하는 방법
File 클래스의 isFile() 함수를 사용하면 됨 (아래 링크 참고)

1. printFile.txt 라는 텍스트 파일에 무언가 입력하고자 할때
1
2
3
4
5
6
7
8
9
10
11
12
class writeme{
    //선언
    PrintWriter printFile;
    main(String arg[]){
        //txt 파일을 하나 만들겠다고 함
        printFile = new PrintWriter("printFile.txt");
        //객체를 통해 txt 파일에 문자를 기입(아직 출력하지 않고 객체에 저장됨)
        printFile.print("나분자식");
        //파일 작성을 완료하고 닫으면서 객체에 저장되었던 내용이 txt파일에 저장되고 끝
        printFile.close();
    }
}

2. heriporter.txt 라는 파일에 있는 내용을 읽어오고자 할때

1
2
3
4
5
6
7
8
9
10
11
12
13
class readme{
    //선언
    Scanner readFile;
    main(String arg[]){
        //기존에 있는 txt 파일에서 읽어오기로 함
        readFile = new Scanner(new File("heriporter.txt"));
        //명령을 통해 최초 커서 위치부터 순차적으로 txt 파일에 적인 값을 읽어옴
        //숫자, 문자열 읽는 형태에 따라 가능함, 읽을때는 닫을 필요 없음
        int milestone = readFile.textInt();
        //문자열로 라인 하나를 싹 읽어와서 String 값으로 넣어줌
        String espart = readFile.nextLine();
    }
}

java - 자주쓰는 잡다한 함수들


1
System.currentTimeMillis();

 현재 시간을 long 타입으로 돌려준다(밀리세컨 초 단위)
 -----------------------------------------------------------------------

1
Math.random();
0~1까지 랜덤값을 double값으로 반환
보통 (int)(Math.random()*10)+1 형태로 많이 쓴다.
 -----------------------------------------------------------------------
이구문은 중복값을 허용하지 않는 6개의 숫자를 1~45사이에서 랜덤으로 구한다.

1
2
3
4
5
6
System.out.println("설정전"+set);
  for(int i =0; set.size()<6;i++){
   int num = (int) ((Math.random()*45)+1);
   set.add(num);
  }
  System.out.println("설정후"+set);
  -----------------------------------------------------------------------

정규식 패턴 넣고 검사하기
1
2
3
4
5
6
7
8
9
10
11
String[] data = {"ccc""Count""count""bbb""abc""c""cCa"};
  
  Pattern p = Pattern.compile("c[a-z]*");
  
  for(int i=0;i<data.length;i++){
   Matcher m = p.matcher(data[i]);
   
   if(m.matches()){
    System.out.println(data[i]+"\t");
   }
  }

---------------------------------------------------------------------------
콘솔로 사용자에게서 입력값을 받으려는 경우 쓰는 것들

1
2
Scanner sc2 = new Scanner(System.in);
   input = Integer.parseInt(sc2.nextLine());

줄여서 표현
1
int mainMenuChoice = new Scanner(System.in).nextInt();

String 활용 예제 - 문자열에 원하는 문자열이 몇번 있는지 추출

//다음과 같이 정의된 메서드를 작성하고 테스트하시오.
//메서드명 : count
//기 능 : 주어진 문자열(src)에 찾으려는 문자열(target)이 몇 번 나오는지 세어서 반환한다.
//반환타입 : int
//매개변수 : String src
//String target
//[Hint] String클래스의 indexOf(String str, int fromIndex)를 사용할 것


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Exe01 {
 public static int count(String src, String target) {
  int count = 0; // 찾은 횟수
  int pos = 0; // 찾기 시작할 위치
  
  while (true) {
   pos = src.indexOf(target, pos);
   if (pos != -1) {
    count++;
    pos += target.length();
   } else {
    break;
   }
  }
  return count;
 }
 public static void main(String[] args) {
  System.out.println(count("12345AB12AB345AB""AB"));
  System.out.println(count("12345""AB"));
 }
}
// [결과]
// 3
// 0

Java - String 활용2 - 주어진 문자열에서 주어진 금지 문자열을 제외한 결과 문자열을 반환

//다음과 같이 정의된 메서드를 작성하고 테스트하시오.
//메서드명 : delChar
//기 능 : 주어진 문자열에서 금지된 문자들을 제거하여 반환한다.
//반환타입 : String
//매개변수 : String src - 변환할 문자열
//String delCh - 제거할 문자들로 구성된 문자열
//[힌트] StringBuffer와 String클래스의 charAt(int i)과 indexOf(int ch)를 사용하라.
//
//========================================================================


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Exe02 {
 public static String delChar(String src, String delCh) {
  StringBuffer sb = new StringBuffer(src.length());
  for(int i=0; i < src.length();i++)
   {
      char ch = src.charAt(i);
      // ch가 delCh에 포함되있지 않으면(indexOf()로 못찾으면) sb에 추가
   if(delCh.indexOf(ch)==-1) // indexOf(int ch)를 호출
   sb.append(ch);
  }
      return sb.toString(); 
 // StringBuffer에 저장된 내용을 String으로 반환
 }
 public static void main(String[] args) {
  System.out.println("(1!2@3^4~5)" + " -> "
    + delChar("(1!2@3^4~5)""~!@#$%^&*()"));
  System.out.println("(1 2 3 4\t5)" + " -> "
    + delChar("(1 2 3 4\t5)"" \t"));
 }
}
//[실행결과]
//(1!2@3^4~5) -> 12345
//(1 2 3 4 5) -> (12345)

JAVA - 소수점 이하 자리 표현시 자르는 방법 혹은 끊는 방법 (소수점 이하 두자리만 표시 등)

전용뷰어 보기
(1)
1
String avg= new java.text.DecimalFormat("#.##").format(d.getAvg());

(2)
1
String avg =String.valueOf(Math.floor(d.getAvg() * Math.pow(10, 2) + 0.5) / Math.pow(10, 2));

(3)
1
2
3
int avgint = (int)(d.getAvg()*100);
String avg = Float.toString((float)avgint/100);


확인해보니 크게 세가지 정도로 압축되는데 원리는 셋다 같습니다.
설명하자면

1. 가져온 float 값을(소수점 자리가 포함된 float값임)
*100(소수점 2자리만 구하는 경우) 하고 int 형으로 변환

2. 1을 통해 구해진 int 형 값을 100으로 나눈뒤 그 결과값을 
    float형태로 넣어주되 결과값을 String으로 받아버리면 
    float의 뒤에 00000 이 사라진 값이 저장되어
    볼때 좀 깔끔합니다.
    근데 음... 결국은 스트링으로 받습니다.

JAVA -ECLIPSE 환경에서 에러 CASE 정리

01. Null pointer access: The variable pageInfo can only be null at this location


현상 : Null pointer access: The variable pageInfo can only be null at this location

원인 : 
PageInfo 를 만들고 사용할때 , 
PageInfo pageinfo = (PageInfo)session.getParameter("pageInfo");
pageInfo = new PageInfo();    선언이 생략되어 발생하는에러 
pageInfo.setContent("boardForm.jsp");
or 생성한 객체에 null 초기값을 준후 값 셋팅을 안한뒤에 뭔가 동작을 지시했을때 발생
or 현재 사용하려는 객체가 null값이래요
--> 중간에 값을 넣는 부분을 생략했을 가능성이 큼 

02. Prints the ASM code to generate the given class

현상 : Prints the ASM code to generate the given class

원인 : 
실행시 조건에 맞지 않는 방식으로 실행을 시도할때 발생
단축키로 실행시 메인 생성하지 않고 만든 클래스에 메인함수를 집어넣어서 실행시 발생
--> Run as -> java Application 으로 실행 혹은 해당 프로젝트에 알맞게 실행하면됨