2011年11月27日 星期日

URL 傳值中文編碼&解碼

        // 網址
        String tempStr = "http://wwwtest.etax.nat.gov.tw/newReport/createReport/Report35_n_Generator.jsp?reportName=TAX35_n&p_cat=351_%E5%9C%8B%E9%9A%9B%E9%81%8B%E8%BC%B8%20&hsn_cd=A&ban=47249755&dst_cd=001&dst_cd_m=03&dst_nm=%E8%B2%A1%E6%94%BF%E9%83%A8%E8%87%BA%E5%8C%97%E5%B8%82%E5%9C%8B%E7%A8%85%E5%B1%80&town_cd=00&be_name=%E7%A5%9E%E9%80%9A%E9%9B%BB%E8%85%A6%E8%82%A1%E4%BB%BD%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8&be_add=%E8%87%BA%E5%8C%97%E5%B8%82%E5%85%A7%E6%B9%96%E5%8D%80%E6%B8%AF%E5%A2%98%E9%87%8C%E5%A0%A4%E9%A0%82%E5%A4%A7%E9%81%93%EF%BC%92%E6%AE%B5%EF%BC%91%EF%BC%98%EF%BC%97%E8%99%9F&be_owner=%E8%8B%97%E8%B1%90%E5%BC%B7&ear_name=testttt&ear_add=testt&ear_owner=twestt&ear_yyy=099&ear_mm=09&gd_yyy=099&gd_mm=09&gd_dd=09&pay_yyy=099&pay_mm=09&pay_dd=18&pw_amt=4277590&b_yy=99&b_mm=09&barcode1=9909226AE&barcode2=A030047249755990909&barcode3=3513J0004277590&tax_cd=35&sub_tax_cd=1&print_date=2011%E5%B9%B411%E6%9C%8828%E6%97%A5%2011%E6%99%8241%E5%88%8654%E7%A7%92&fee=6&area1=%E8%87%BA%E5%8C%97%E5%B8%82&area2=%E4%BF%A1%E7%BE%A9%E5%8D%80&cha=%E2%96%A0&chb=%E2%96%A1&chc=%E2%96%A1&chd=%E2%96%A1&che=20&auto_amt_n=%E2%96%A1&auto_amt_y=%E2%96%A1&be_tel=0987546213&chf=&pw_amt_n=4%2C277%2C590" ;
      
        // 先將參數和網址分開
        String Str1[] = tempStr.split("\\?");
      
        // 導向頁面
        String ProStr[] = Str1[0].split("/");
        System.out.println(ProStr[ProStr.length -1]);
      
        // 各參數
        String ValuesStr[] = Str1[1].split("&");      
        for (int i=0 ; i<ValuesStr.length ; i++){

            if (ValuesStr[i].indexOf('%') == -1){
                System.out.println(ValuesStr[i]);          
            }else{
                String innerStr = URLDecoder.decode(ValuesStr[i],"UTF-8");
                System.out.println(innerStr);      
            }
          
        }

2011年11月22日 星期二

Error:The literal 1000000000000 of type int is out of range










明明是宣告 long 的型態,卻出現 The literal 1000000000000 of type int is out of range 的訊息

基本类型:byte 二进制位数:8
包装类:java.lang.Byte
最小值:Byte.MIN_VALUE=-128
最大值:Byte.MAX_VALUE=127

基本类型:short 二进制位数:16
包装类:java.lang.Short
最小值:Short.MIN_VALUE=-32768
最大值:Short.MAX_VALUE=32767

基本类型:int 二进制位数:32
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE=-2147483648
最大值:Integer.MAX_VALUE=2147483647

基本类型:long 二进制位数:64
包装类:java.lang.Long
最小值:Long.MIN_VALUE=-9223372036854775808
最大值:Long.MAX_VALUE=9223372036854775807

基本类型:float 二进制位数:32
包装类:java.lang.Float
最小值:Float.MIN_VALUE=1.4E-45
最大值:Float.MAX_VALUE=3.4028235E38

基本类型:double 二进制位数:64
包装类:java.lang.Double
最小值:Double.MIN_VALUE=4.9E-324
最大值:Double.MAX_VALUE=1.7976931348623157E308

基本类型:char 二进制位数:16
包装类:java.lang.Character
最小值:Character.MIN_VALUE=0
最大值:Character.MAX_VALUE=65535

原來在 1000000000000後面加上1000000000000L就解決了

 

2011年11月21日 星期一

計算程式執行時間 - System.currentTimeMillis()

                long StartTime = System.currentTimeMillis(); // 取出目前時間
                // ==============================
                // 你的程式
                // ==============================
                long ProcessTime = System.currentTimeMillis() - StartTime; // 計算處理時間
                System.out.println( ProcessTime); // 累積計算時間

http://mqjing.blogspot.com/2007/03/java.html

2011年11月17日 星期四

數字格式化 to ("$$$,$$$,$$$")

public class TestCode {
    public static void main(String[] args) {
        // 先將字串轉成數字 再轉回字串
        String str = Integer.toString(Integer.parseInt("-123567890")) ;       
        int k = 0 ;
        if (str.indexOf(",") == -1) {
              for (k = 0; k < Math.floor((str.length()-(1+k))/3); k++){
//                System.out.println(k + " < " + Math.floor((str.length()-(1+k))/3));
//                System.out.println("str.length() - (4*k+3): " + Integer.toString((str.length()-(4*k+3))));
                // 取出第一個逗號以前的字串
                String u =  str.substring(0, str.length() - (4*k+3)) ;
               
                if ( !u.equals("-")){ // 若前面的字串為 "-" ,則取消組合。               
                    // 取出第一個逗號以後的字串
                    String l =  str.substring(str.length() - (4*k+3)) ;
                    // 組合
                    str =  u + ',' + l ;
                }
               
              }
            }
//        System.out.println(k + " < " + Math.floor((str.length()-(1+k))/3));
        System.out.println(str);
    }   
}

2011年11月16日 星期三

String.equals()和String.equalsIgnoreCase()的區別

 boolean equals(Object anObject)
          將此字元串與指定的物件比較。
 boolean equalsIgnoreCase(String anotherString)
          將此 String 與另一個 String 比較,不考慮大小寫。

String.equals()會考慮大小寫,而String.equalsIgnoreCase()會忽略大小寫

2011年11月14日 星期一

JFrame 置中的方法

一個最簡單的方法就是先設定其大小,在設定相對位置:

setSize(800, 600);
setLocationRelativeTo(null);


另一個就是利用運算將中心點算出

Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
setSize(800, 600);
setLocation((d.width-getWidth())/2, (d.height-getHeight())/2);

如何交換兩個變數,而不動用第三個變數? (C/C++) (C) (.NET) (C#)

http://www.cnblogs.com/oomusou/archive/2007/09/09/887337.html

若要兩數交換,可以這樣寫。

= x xor y
= x xor y
= x xor y

但執行速度上會比使用暫存變數來的慢些!

public class TestCode {
    public static void main(String[] args) {
        int A = 3;
        int B = 7;
        System.out.println("A:" + A + " B:" + B);
        A = A ^ B ;
        B = A ^ B ;
        A = A ^ B ;
        System.out.println("A:" + A + " B:" + B);
        );
    }   
}

2011年11月13日 星期日

搜尋特定目錄位置的檔案清單

import java.io.File;
import java.io.IOException;

public class TestCode {
    public static void main(String[] args) {
        //CreateDir();
        String path = "D:/Documents/My Work/線上申辦/線上申辦 程式說明文件";
        File f = new File(path);
        if( f.exists()){ // 確認檔案路徑是否存在
            if (f.isDirectory()){ // 確認是否為資料夾
                String temp[] = f.list(); // 取出該路徑下檔案清單
                for (int i =0 ; i<temp.length ; i++){
                    System.out.println(temp[i]);
                    String tempSplit[] = temp[i].split("\\.");
                    for (int j=0 ; j<tempSplit.length ; j++){
                        System.out.println(tempSplit[j]);
                    }
                    if (tempSplit[tempSplit.length-1].equals("doc")){
                        String si = path + "/" + temp[i];
//                        System.out.println(si);
                        File fi = new File(si);
                        String so = path + "/"+ tempSplit[0] + "." + tempSplit[1] + ".1." + tempSplit[3];
                        File fo = new File(so);
//                        System.out.println(so);
                      
                        fi.renameTo(fo); // 將檔名更改                      
                        String s1[] = si.split("/");
                        String s2[] = so.split("/");
                        System.out.println(s1[s1.length-1] + " --> " + s2[s2.length-1]);
                      
                        }                  
                }
            }      
        }      
    }

2011年11月4日 星期五

建造指定目錄

/**
* 建造指定目錄
* 此方式會將vatrefund視為檔案= =?
*/


public static void CreateDir(){        
        System.out.println();        
        //String filePath = "WEB-INF/classes/com/hyweb/gip/vatrefund/123";
        String filePath = "javagip/gipadmin/site/public/Data/vatReport/123";
        File file = new File(filePath);
        if(!file.exists())
        {
            file.getParentFile().mkdirs();
            //File Delfile = new File(filePath);
            //Delfile.deleteOnExit();
                        
            try {
                file.createNewFile();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

2011年11月3日 星期四

第一個Java程式的基本程式結構

http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/FirstJava.htm


首先請編輯一個HelloWorld.java的文字檔案,注意副檔名是*.java, 請記得主檔名,因為程式碼中要用到它,您的第一個程式是這樣的:

  • HelloWorld.java

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello! World!");
    }
}


寫Java程式通常都是由定義「類別」開始,


"class"是Java 用來定義類別的關鍵字,


類別的名稱是HelloWorld,這與您所編輯的檔案(HelloWorld.java)主檔名必須相同,


在編寫Java程式 時,一個檔案中可撰寫數個類別,但是只能有一個"public" 類別, 而且檔案主檔名必須與這個"public"類別的名稱相同。



接下來看看 main() 方法(Method),它是Java程式的「進入點」 (Entry point), 程式的執行是由進入點開始的,它一定是個"public" 成員(Member), 這樣它才可以被呼叫;由於它不需要產生物件就要能被執行,所以它必須是個"static"成員。

(public與static的觀念都是物件導向程式上的觀念,之後討論類別與物件時會再看到)

"void"表示這個方法執 行結束後不傳回任何值,Java程式的主 方法不需傳回任何值,所以一律使用void;main()是Java程式的 主方法名稱,其中"String[] args"是 命令列引數 (Command line argument),可以在執行程式時取得使用者指定的相關參數,目前雖然您不使用,但仍要撰寫它,這是規定,args只是個參數名稱,可以隨意命名。你 也可以寫成"String args[]",這是彷造C語言的語法,但Java中偏好"String[] args"的寫法。