반응형

JAVA

*int형 자릿수 구하기

Math.log10(num)+1 // int num = 숫자


*2차원 배열의 길이 구하기

int array = int[x][y];

array.length // x의 길이

array[y].length // y의 길이


*제곱함수

Math.pow(x,y); // x = 밑, y = 지수 ex) x^y // x의 y승


반응형
반응형

java(자바) - 정확한 숫자계산 할때 사용하는 빅데시멀(BigDecimal) 정리(형변환,선언,사칙연산)


자바에서 숫자값 계산을 할때 int, double등등을 사용하면 소숫점 값이 오차를 보이는데

오차를 만들지 않게 정확한 계산을 할때 사용합니다.



*선언

BigDecimal 변수명 = new BigDecimal(String숫자값);

BigDecimal num1 = new BigDecimal("1000.55");

BigDecimal num2 = new BigDecimal("0.5");


*사칙연산

num1.add(num2);   //덧셈 num1 + num2

num1.subtract(num2); //뺄셈 num1 - num2

num1.multply(num2);  //곱셈 num1 * num2

num1.multiply(num2);  //나눗셈 num1 / num2


*나눗셈 소수점처리

num1.divide(bdcl2 , 2(소수점자리수), BigDecimal.ROUND_UP); //올림

num1.divide(bdcl2 , 4, BigDecimal.ROUND_DOWN); //버림

num1.divide(bdcl2 , 3, BigDecimal.ROUND_HALF_UP); //반올림

num1.divide(bdcl2 , 1, BigDecimal.ROUND_HALF_DOWN); //반내림


*비교

num1.compareTo(num2);

//num1이 작으면 1 로 return

//num1이 같으면 0 로 return

//num1이 더크면 1 로 return


*소수점 처리

num1.setScale(소수점자릿수, BigDecimal.ROUND_UP)); //올림

num1.setScale(1, BigDecimal.ROUND_UP)); //올림


*타입변환

//빅데시멀(BigDecimal) -> 스트링(String)

num1.toPlainString();


//빅데시멀(BigDecimal) -> int/float/long 등

num1.intValue();

num1.floatValue();

num1.longValue();


반응형
반응형

java - 지정날짜의 월차이 차이 구하기 / 정확한 개월수 차이 구하기 / 날짜 차이 구하기 / 날짜 개월수 구하기

찾다가 오늘날짜에서의 개월수 차이 구하는 거밖에 안나와서 대충 만들었습니다.

부족하지만 필요하면 갖다쓰세요...


*윤년 계산법 = 현재년도 / 400  ( 나머지값이 0이면 29일 그외는 28일 )

*각 개월수별 범위

-3개월 89~92일

-6개월 181~184일

-12개월 365~366일


//시작

try {

String startDate = "20180101"; //시작날짜

String endDate = "20180301";  //마지막 날짜


// YYYY-MM-DD 로 만들기위해서 지우고 다시 생성해줌

startDate = startDate.replaceAll("-", "");

endDate = endDate.replaceAll("-", "");

String sd1 = startDate.substring(0, 4);

String sd2 = startDate.substring(4, 6);

String sd3 = startDate.substring(6, 8);

String ed1 = endDate.substring(0, 4);

String ed2 = endDate.substring(4, 6);

String ed3 = endDate.substring(6, 8);

startDate = sd1+"-"+sd2+"-"+sd3;

endDate = ed1+"-"+ed2+"-"+ed3;

 

// 날짜를 data타입으로 변경

SimpleDateFormat fm = new SimpleDateFormat("yyyy-MM-dd");

Date sDate = fm.parse(startDate);

Date eDate = fm.parse(endDate);

// 시간차이를 시간,분,초를 곱한 값으로 나누면 하루 단위가 나옴

long diff = eDate.getTime() - sDate.getTime();

        long diffDays = diff / (24 * 60 * 60 * 1000) ;

 

        long difMonth = (diffDays+1)/30; //총개월수 ( 대략 30으로 나눴을때 나오는 개월수 )

        long chkNum = 0; 

        

        int j=0;

        

        //개월수 체크 ( 시작한날짜월부터 위에서 대충 계산한 개월수까지 )

    //각 월별로 해당하는 월수에 맞게 더해줌

        for(int i=Integer.parseInt(sd2); j<difMonth; i++) {

        if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12 ) {

        chkNum += 31;

        }else if(i==4 || i==6 || i==9 || i==11 ) {

        chkNum += 30;

        }

        if(i==2) {

        //윤달체크

        if( ((Integer.parseInt(sd2))%400) == 0 ) {

        chkNum+=29;

        } else {

        chkNum+=28;

        }

        }

        j++;

 if(i>12) { i=1; j=j-1;}

        }

        long allMonth = (chkNum+1)/30; //진짜 총개월수

        if(diffDays < chkNum) { 

        allMonth = allMonth-1; // 대충 구한개월수는 더많을수 있어서 1빼줘서 진짜 개월수를 구함

        }


    System.out.println("날짜차이 =" + diffDays);

    System.out.println("총 차이  =" + chkNum); //실제 차이나야하는 총일수

    System.out.println("개월수 =" + difMonth);

    System.out.println("진짜개월수 =" + allMonth);

        

} catch (Exception e) {}


감사합니다

sysout으로 찍어놔서 확인해보시고 오류있으시면 댓글달아주세여..

제가확인할때는 괜찮았습니다.

반응형
반응형

controller 동적으로 url mapping하기 - 동적 주소 매핑


cotroller에서 RequestMapping을 사용해서 url을 매핑 시켜주는데

주소만 다르고 기본적인 컨트롤러가 같은경우나

여러가지 화면을 동적으로 매핑시켜주고 싶을때

많은 화면을 컨트롤러 리퀘스트매핑을 한개로 사용하고 싶을때

동적으로 주소를 매핑하면 편하고, 소스도 간결하게 줄일 수 있습니다.


딱히 어렵지도 않습니다.

그냥 ReauestMapping에 주소 경로 설정해줄때 {id값} 으로 설정해주고

@PathVariable("id값") 받고싶은형태 변수명  이렇게 입력해주시면 끝입니다.

아래 예제로 보시면.

 

@Controller

@RequestMapping(value = "/hompage")

public class MainController {


@RequestMapping(value = "/main/{urlid}")

 public ModelAndView intro( @PathVariable("urlid") String urlid

        HttpServletRequest request,

        HttpServletResponse response, 

        Model model

         ) throws Exception{

    

      return new ModelAndView("/main/"+urlid);

 }

 


}


위에는 일단 클래스에 /hompage/main/~.do 로 들어오는 url은 다 저걸 탑니다.

~에 들어오는 값들이 @PathVariable("urlid") String urlid 에서 보는 것처럼

String의 변수 urlid 값이 들어갑니다.


그래서 return을 해줄때 jsp파일명이 같다면 위와같이 경로를 잡아주고 urlid 를 사용하면 편합니다.

한두개만 성격이 다른화면이면

switch문이나 if문을 사용해서 해당 url에 맞게 수정해주면 될것 같습니다.


화면이 적은곳에서는 그냥해도 상관없는데 비슷한 류의 화면이 많은경우 사용하면 아주 편합니다!


반응형
반응형

JAVA - 클라이언트 아이피 확인


public String getClientIp(HttpServletRequest request) throws Exception {


String ip = request.getHeader("X-Forwarded-For");

LOGGER.info("X-FORWARDED-FOR : " + ip);

    

String ip2 = request.getHeader("Proxy-Client-IP");

LOGGER.info("Proxy-Client-IP : " + ip2);


String ip3 = request.getHeader("WL-Proxy-Client-IP");

LOGGER.info("WL-Proxy-Client-IP : " + ip3);


String ip4 = request.getHeader("HTTP_CLIENT_IP");

LOGGER.info("HTTP_CLIENT_IP : " + ip4);


String ip5 = request.getHeader("HTTP_X_FORWARDED_FOR");

LOGGER.info("HTTP_X_FORWARDED_FOR : " + ip5);


String ip6 = request.getRemoteAddr();

LOGGER.info("Result : IP Address : "+ip6);


return ip6;

}

   

반응형
반응형

http://hellogk.tistory.com/11


http://hellogk.tistory.com/10

http://arabiannight.tistory.com/entry/%EC%9E%90%EB%B0%94Java-String%EC%9D%84-List-List%EB%A5%BC-String-%EB%B0%B0%EC%97%B4%EB%A1%9C-%EB%B3%80%ED%99%98

http://toyuq.tistory.com/160

-------------------------------------

http://itpangpang.xyz/269

http://www.omnibuscode.com/board/board_java/37125

http://mainia.tistory.com/3950


column = obj.get(keyname).toString();

               

                // 세 번째 줄

                int x=0;

                row = sheet1.createRow(2);

                String[] columns = column.split(",", 0);

                    for (String col : columns ){

                    cell = row.createCell(x);

                    cell.setCellValue(col);

                    x++;

//                        System.out.println("columns:"+col);

                    }

                cell.setCellStyle(cellStyle); // 셀 스타일 적용



=============================================================

requestbody 한글깨짐


1.

produces="text/plain;charset=UTF-8"

2.

<!-- Start: 한글문제 처리 -->
<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>utf-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Finish: 한글문제 처리 -->

3.
URLEncoder.encode(ajaxName , "UTF-8");


==============================================================


java like 기능 -> contain

equls 기능 -> matchs

반응형
반응형


List<String> list 를 선언하고

Collections.reverse(list);

사용하시면 됩니다.

반응형
반응형

웹페이지에서 파싱하기 예제를 진행하겠습니다.

jsoup라는 라이브러리를 사용하였습니다.


https://jsoup.org 에서 dependency 및 jar파일을 다운로드 가능하며 

각 상세정보를 확인하실수 있습니다.


처음에는 pom.xml에서 dependency 를 추가해주거나 jar파일을 넣어주세요.

제가 사용한 dependency 소스는 아래와 같습니다.


<dependency>

<!-- jsoup HTML parser library @ https://jsoup.org/ -->

<groupId>org.jsoup</groupId>

<artifactId>jsoup</artifactId>

<version>1.10.3</version>

</dependency>


클래스 파일을 생성해 주세요.

그리고 메인 생성후 익셉션까지 추가해줍니다.


public class Sample {

public static void main(String[] args) throws Exception {

}

}


이제 파싱할 홈페이지 주소와 홈페이지에서 파싱할 태그등을 입력해줄겁니다.

주소를 설정해주세요. 변수는 파란색으로 바꿔놨습니다.

Document url = Jsoup.connect("http://홈페이지 주소").get();

파싱할 html태그와 id나 class값을 입력해주세요.

Elements tagVal = url.select("div.info h4 a"); // class가 info인 div태그 안쪽 -> h4 태그 안쪽 -> a태그를 가져오겠다는 의미입니다.

이제 파싱한 태그에서 text값만 추출해야겠죠.

위에 출력값은 <a id='www'>예제입니다.</a> 이런식으로 출력됩니다.

String texttagVal .select("a").html();  // 이렇게 주시면 a태그의 text값만 가져올수있습니다.

출력값은 예제입니다 만 추출이 될것입니다.

이거만 가지고 응용을 하시면 간단한 정보들은 충분히 파싱하실수 있으실 겁니다.


public class Sample {

public static void main(String[] args) throws Exception {

Document url = Jsoup.connect("http://홈페이지 주소").get();

Elements tagVal url.select("div.info h4 a");

String texttagVal .select("a").html();

System.out.println( "tagVal : " + tagVal );

System.out.println( "text : " + text );

}

}


반응형
반응형

java로 메모장에 text를 입력하고 저장하는 예제를 만들어보겠습니다.

이번에는 파일 입력만 진행하겠습니다. 출력은 나중에..

진행하게된 이유는 일단 이번에 파싱을해서 파싱한 값들로 db 데이터쿼리를 만들었는데

쿼리를 옮겨적기 귀찮아서 겸사겸사 예제를 만들어봅니다.


일단 기본적인 java 클래스를 생성해주세요.

바로 실행할수있는 main도 만들어주시면됩니다.

저는 'FileSave'라는 이름으로 클래스를 만들었습니다.

아래와 같겠네요.


public class FileSave {  

    public static void main(String[] args) {

     

    }

}



여기서 변수를 선언해주세요. 아주 기본적인 것만 진행할거라..

변수는 1. 메모장에 저장할 텍스트 ,  2. 파일을 저장할 경로 및 파일명 2가지입니다.

String text = "저장할 값입니다.";

String fileNm = "D:\\example\\date_file.txt";

 // 저는 D드라이브 example 폴더안에 파일명이 date_file.txt 로 저장을 할것입니다.


이제 본격적인 작업을 시작하겠습니다.

파일 객체를 생성해줄 겁니다.

File file = new File(fileNm);

FileWriter fileWrite = new FileWriter(file, true);

// 위에 FileWrite를 생성해주고 위에 생성한 file 그리고 true 를 작성해줍니다.

// true는 파일이 이미 있을 경우. 그 파일에 text를 이어서 작성해줍니다.

            

이제 파일안에 문자열을 넣어야겠죠

fileWrite.write(text);

fileWrite.flush(); 

fileWrite.close();

// fileWrite에 .write(text)로 값을 넣어주고 .close()로 닫아줍니다.


그리고 익셉션 처리를 해주면 끝입니다.

위에 작성한 코드들을 try 안에 넣어주세요.

try{

------여기로-------           

} catch (Exception e){

e.printStackTrace(); 

// e.printStackTrace()는 오류발생시 오류사항을 console에 표출해줍니다.

}


그러면 이제 됬습니다.

이제 자바파일을 실행( ctrl + F11 )하시면 위에 작성한 text가 해당 경로와 파일명으로 생성될겁니다.


전체적인 소스는

public class FileSave {  

    public static void main(String[] args) {

           String text = "저장할 값입니다.";

String fileNm = "D:\\example\\date_file.txt";

try{

File file = new File(fileNm);

FileWriter fileWrite = new FileWriter(file, true);


fileWrite.write(text);

fileWrite.flush(); 

fileWrite.close();

} catch (Exception e){

e.printStackTrace(); 

}

    }

}

이렇게 되겠네요.

문자열을 쓰시고 줄바꿈을 하시려면 .newLine() 를 사용하시면 됩니다.

그리고 소스 import는 컨트롤 + 시프트 + 영어O  를 누르시면 자동 import 됩니다.

import java.io.BufferedWriter;

import java.io.FileWriter;

이거 2개가 import 될겁니다.

이상으로 java로 메모장에 text 저장하기를 진행했습니다.

반응형

'IT > JAVA' 카테고리의 다른 글

java 배열 순서 뒤집기.  (0) 2018.06.08
java - 웹페이지에서 파싱하기 jsoup  (0) 2018.02.08
이클립스 설치 및 java프로젝트 실행  (0) 2018.01.06
java연산자와 연산식  (0) 2018.01.05
java변수와 데이터타입  (0) 2018.01.05
반응형

이클립스 설치 및 java프로젝트 실행까지 진행해 보도록 하겠습니다.

이클립스란?

개발자의 코딩실수를 줄여주기 위한 툴로 여러가지 편집 툴이 있는데
그중에서도 자바개발할때 많이사용하는 툴이 이클립스입니다.

이클립스는 자바 프로그램을 개발하기 위한 통합개발환경(IDE)를 제공하는데,
프로젝스생성, 자동코드완성, 디버깅 기능을 가지고있습니다.
이클립스는 오픈소스 개발 플랫폼으로 무료로 제공됩니다.
기본적으로 자바 프로그램을 개발할 수 있도록 구성되어 있지만,
개발자가 추가적으로 플러그인을 설치하면 안드로이드 앱 개발, 웹 애플리케이션 개발 등
다양한 개발환경을 구축할 수 있습니다.


이클립스 다운로드

이클립스는 자바언어로 개발된 툴이기 때문에 이클립스를 실행하려면 JVM이 필요합니다.
JVM은 앞에 JDK하면서 설치를 해서 이클립스만 다운로드 받으면 됩니다.


이클립스는 아래 하단에 있는 주소에서 다운로드 받을 수 있습니다.

https://eclipse.org/home/index.php



이클립스 다운로드를 위해

우측 상단에 다운로드 버튼을 눌러주세요.



최신 이클립스 버전인 OXYGEN을 받으셔도 되는데

다른 버전들을 다운로드 받으시고 싶으실수도 있으니 빨간표시를 눌러주세요.




설치형과 zip형이 있는데 원하시는 것을 다운로드 받아 사용하시면 되겠습니다.

제가 좌측에 빨간테두리로 되있는 부분이 zip형입니다. 그 바로위가 설치형이구요.

해당 bit에 맞춰서 다운로드하시면 되구요.

또 버전별로 여러가지가 있는데 우측에 루나, 마스, 네온 등등 여러가지 버전을 다운로드 받을 수 있습니다.

프로젝트 개발환경에 맞춰 다운로드를 하시면 됩니다.




이클립스를 실행하면 가장먼저 나오는 창인 workspace입니다.

자바프로젝트의 저장경로를 설정해주는 것인데 원하시는 폴더로 저장하셔도 되고

그냥 기본 디폴트로 되있는 워크스페이스를 쓰셔도 됩니다.

추후 워크스페이스를 변경하고싶다면 이클립스 실행후 File - Switch Workspace 를 눌러서 변경하시면 됩니다.

설정 후 OK를 눌러주세요.



실행 하셨다면 이제 자바 프로젝트를 만들어봐야겠죠.

project Explorer안쪽에 우클릭하셔서  New - Project... 를 클릭해주세요.



그리고 빨간표시로 된 자바프로젝트를 선택해줍니다.

그리고 넥스트!



프로젝트명을 입력해주시고 Finish 해주시면 됩니다.

그러면 Sample라는 자바프로젝트가 생성됬습니다.



이제 자바프로젝트를 만들었으니 Class파일을 만들차례입니다.

src에 우클릭하셔서 위와같이 class를 클릭해주세요.



그럼 위와같이뜨는데 클래스명을 입력해주시고

그아래 public static void main 이부분을 체크해주세요.

체크 안하시고 직접입력해주셔도 되지만 편의를 위해 클릭후 finish해주세요.



그다음 기본적으로 실행을 해봐야하니 main안쪽에 

System.out.println("hello! java"); 를 입력해주세요.

출력하는 소스입니다.

그리고나서 왼쪽상단에 시작버튼 초록색으로 된것을 눌러주시면

하단에 Console에 'hello! java' 라고 뜨는것을 보실수있습니다.

이상으로 이클립스 설치 및 java프로젝트 실행하기까지 진행하였습니다.

반응형

+ Recent posts