<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    wonderer's program

    everything will be better
    posts - 19, comments - 6, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    2007年10月25日

    去SA面試的時候,面試官問我平時用Java的什么數據結構,答曰:Vector。又問:哪有用過其他的的嗎?例如List和Map之類的。答曰:甚少。(自己汗一個,沒水平)既然不會就要學習啦。

    翻開《Java學習筆記》,里面對對象容器的描述不錯。

    1. ArrayList和LinkedList

    ArrayList使用了數組結構實現List的數據。所以ArraryList用來快速定位對象是非常有效率的。但是如果要對ArraryList中間插入或者刪除,效率會非常低。

    LinkedList使用鏈表來實現的List。所以跟ArrayList相反,LinkedList對于插入和刪除是非常有優勢,反之對于快速定位,是LinkedList的弱項。

    1)ArrayListDemo

    public class ArrayListDemo {
        public static void main(String[] args) {
            
            //用Scanner類,可以輕松獲得commander的輸入
            Scanner scanner = new Scanner(System.in);
            
            List<String> list = new ArrayList<String>();
            
            //在控制臺輸入,quit退出
            while(true) {
                System.out.print("Rokey@console# ");
                String input = scanner.next();
                if(input.equals("quit")) {
                    break;
                }
                list.add(input);
            }
            
            System.out.print("顯示輸入:");
            
            //使用5.0的foreach功能對List進行遍歷
            for(String s:list) {
                //5.0的類C的輸出格式
                System.out.printf("%s ",s);
            }
        }
    }

    輸出:

    Rokey@console# 一二三
    Rokey@console# 三二一
    Rokey@console# quit
    顯示輸入:一二三 三二一 
    

     

    2)用LinkedList實現的一個字符串棧

    /**
     *
     * @author Rokey
     * 用LinkedList構建一個字符棧,先進先出
     */
    public class StringStack {
    
        private LinkedList<String> linkList;
    
        public StringStack() {
            linkList = new LinkedList<String>();
        }
    
        public void push(String s) {
            //將元素加入鏈表第一個位置
            linkList.addFirst(s);
        }
    
        public String pop() {
            //刪除鏈表第一個元素,并返回
            return linkList.removeFirst();
        }
    
        public String top() {
            //返回鏈表第一個元素,但并不刪除
            return linkList.getFirst();
        }
    
        public boolean isEmpty() {
            //檢查鏈表是否為空
            return linkList.isEmpty();
        }
    }
    public class StringStackDemo {
    
        public static void main(String[] args) {
    
            //用Scanner類,可以輕松獲得commander的輸入
            Scanner scanner = new Scanner(System.in);
    
            StringStack stack = new StringStack();
    
            //在控制臺輸入,quit退出
            while (true) {
                System.out.print("Rokey@console# ");
                String input = scanner.next();
                if (input.equals("quit")) {
                    break;
                }
                stack.push(input);
            }
    
            System.out.print("顯示輸入:");
            //使用5.0的foreach功能對List進行遍歷
            
            while(!stack.isEmpty()) {
                //5.0的類C的輸出格式
                System.out.printf("%s ", stack.pop());
            }
        }
    }

    輸出:

    Rokey@console# 一二三
    Rokey@console# 三二一
    Rokey@console# quit
    顯示輸入:三二一 一二三 

    posted @ 2007-12-27 23:05 wonderer 閱讀(3078) | 評論 (0)編輯 收藏

    OYM中的任務中,有一項對文件內容的檢查挺有意思的,就是要檢查字符是否是全角的,例如“GY”(not“GY”),并且把這些字符改為半角的。
    想起了在研發中心的一個朋友的抱怨:“昨天寫了一整天的程序,發到廣大教務處那邊居然說不能用,然后親自跑了一躺,發現不是我的程序有問題,是那邊的人輸入個全角字符,搜半角的字符,當然不行了”
    恩,Betty寫的需求真有意思,考慮的問題很周全,是一個很厲害的項目經理。如果從輸入這里解決了字符是否是半角的,那么,以后的情況就容易解決很多了。恩,網上搜了一下資料,查了一下書,得出了以下代碼:
    public void testChar() {
      String s1 
    = "123";
      String s2 
    = "abc";
      String s3 
    = "123abc";
      System.out.println(s1);
      System.out.println(s2);
      System.out.println(s3);
      
    for (int i = 0; i < s1.length(); i++) {
       
    int j = s1.charAt(i);
       
    if (j > 256) {
        
    int temp = j - 65248;
        
    if (temp >= 0) {
         System.out.print((
    char)j+"-->:" + (char) temp);
        } 
    else {
          System.out.print((
    char) j);
        }
       } 
    else {
        System.out.print((
    char) j);
       }
      }
      System.out.println();
      
      
    for (int i = 0; i < s2.length(); i++) {
       
    int j = s2.charAt(i);
       
    if (j > 256) {
        
    int temp = j - 65248;
        
    if (temp >= 0) {
         System.out.print((
    char)j+"-->:" + (char) temp);
        } 
    else {
         System.out.print((
    char) j);
        }
       } 
    else {
        System.out.print ((
    char) j);
       }
      }
      System.out.println();
      
      
    for (int i = 0; i < s3.length(); i++) {
       
    int j = s3.charAt(i);
       
    if (j > 256) {
        
    int temp = j - 65248;
        
    if (temp >= 0) {
          System.out.print((
    char)j+"-->:" + (char) temp);
        } 
    else {
         System.out.print((
    char) j);
        }
       } 
    else {
        System.out.print((
    char) j);
       }
      }
      System.out.println();
     
     }
    輸出的結果如下:
    123
    -->ab-->bc--c
    123a
    -->ab-->bc--c


    posted @ 2007-12-23 16:46 wonderer 閱讀(1943) | 評論 (3)編輯 收藏

    OYM的任務中,有個要求,上傳一個Excel文件,檢查他的內容是否合法,并返回信息。

    今天想了一下,第一個要解決的問題就是上傳一個Excel文件,上傳文件的組件到挺多的,網上一搜,就有一大堆教程,但是現在并不是要上傳一個文件到服務器以作存儲之用,而是要上傳一個文件到內存里,以Java的數據結構存儲起來,并檢查,把合乎要求的數據寫到數據庫里。所以在網上的一大堆上傳文件的組件并不合用。于是又想自己寫,思路就是從客戶端那里獲取一個InputStream,然后就對這個InputStream做一系列的檢查。代碼如下:

    ServletInputStream sis =  request.getInputStream();
    InputStreamReader isr = new InputStreamReader(sis);
                 
    int ch;
    while((ch = isr.read()) != -1 ) {          
       out.println((char)ch);
    }
                 
    System.out.flush();

    結果的出去就是如下(輸出東西寫到頁面):

    -----------------------------7d7ea23120550 
    Content-Disposition: form-data; name="file1"; 
    filename="C:\Documents and Settings\Administrator\桌面\test.txt" 
    Content-Type: text/plain 
    my name is Rokey.Rokey。我的名字叫Rokey. 
    -----------------------------7d7ea23120550 Content-Disposition: form-data; 
    name="Submit" 上傳 -----------------------------7d7ea23120550--
    很明顯,這里只有
    my name is Rokey.Rokey。我的名字叫Rokey.

    對我有用,這個也正是我的文件里面的內容,其它的都是關于這些form的其它信息。對我這個程序是沒有用的。如果這里寫下去的話,還要我去分析那些是數據,哪些是form的參數。好,到現在為止,我已經打消了自己寫的念頭了。我想,那些組件都可以把上傳文件封裝得那么好,能不能利用那些庫,抽出文件的IO流,讓我操作呢?

    于是,就開始對的API看,看到里面有這么一段。

    public class MultipartParser
    extends java.lang.Object
    A utility class to handle multipart/form-data requests, the kind of requests that support file uploads. This class uses a "pull" model where the reading of incoming files and parameters is controlled by the client code, which allows incoming files to be stored into any OutputStream. If you wish to use an API which resembles HttpServletRequest, use the "push" model MultipartRequest instead. It's an easy-to-use wrapper around this class.

    This class can receive arbitrarily large files (up to an artificial limit you can set), and fairly efficiently too. It cannot handle nested data (multipart content within multipart content). It can now with the latest release handle internationalized content (such as non Latin-1 filenames).

    It also optionally includes enhanced buffering and Content-Length limitation. Buffering is only required if your servlet container is poorly implemented (many are, including Tomcat 3.2), but it is generally recommended because it will make a slow servlet container a lot faster, and will only make a fast servlet container a little slower. Content-Length limiting is usually only required if you find that your servlet is hanging trying to read the input stram from the POST, and it is similarly recommended because it only has a minimal impact on performance.

    而且里面的API已經封裝程我想象得到的情況了。于是,我就覺得這樣我就可以完成我的功能了。于是,就寫了以下代碼:

    MultipartParser mp = new MultipartParser(request, 10 * 1024 * 1024);
    Part part;
    while ((part = mp.readNextPart()) != null) {
          if (part.isParam()) {
              // it's a parameter part
              ParamPart paramPart = (ParamPart) part;
              //out.println("param: name=" + name + "; value=" + value);
          } else if (part.isFile()) {
              FilePart filePart = (FilePart) part;
              InputStream is = filePart.getInputStream();
              InputStreamReader isr = new InputStreamReader(is);
    
              int ch;
              while ((ch = isr.read()) != -1) {
    
                  out.print((char) ch);
              }
    
              System.out.flush();
              isr.close();
              is.close();
          }
    }
                   

    出去結果如下:

    my name is Rokey.Rokey。
    我的名字叫Rokey.
    到現在,已經可以把這個流封裝成一個文件流,送給Excel的組件去處理了。

    posted @ 2007-12-23 00:52 wonderer 閱讀(1446) | 評論 (0)編輯 收藏

         摘要: 什么是IOC呢,在網上搜到了一非常有意思的講解。IoC就是Inversion of Control,控制反轉。在Java開發中,IoC意味著將你設計好的類交給系統去控制,而不是在你的類內部控制。這稱為控制反轉。 下面我們以幾個例子來說明什么是IoC 假設我們要設計一個Girl和一個Boy類,其中Girl有kiss方法,即Girl想要Kiss一個Boy。那么,我們的問題是,Girl如何能夠認識這個B...  閱讀全文

    posted @ 2007-10-28 16:50 wonderer 閱讀(685) | 評論 (0)編輯 收藏

    Buffloa里的傳遞參數的編碼是GBK。

    buffalo.switchPart('body',url,false);如果url中包含漢字,是采用GBK編碼的。在不改變tomcat的配置文件的情況下,在目標頁面里獲得url參數的正確方法是

       1: String name = new String(request.getParameter("name").getBytes(
       2:             "ISO8859-1"), "GBK");

    注意,如果這里用utf-8作為編碼的轉換的話,會出現亂碼。

    posted @ 2007-10-26 16:41 wonderer 閱讀(432) | 評論 (0)編輯 收藏

    最近在準備考試系統的開發,碰到了 request.getParameter亂碼的問題。跟林彬討論了一下,還是覺得用老方法管用。

    如果是post的話,可以通過設置filter的方法來解決。

    如果是get或者是超鏈接的話,以前是通過設置tomcat的配置文件server.xml來解決的,但這樣不好,并不是所有的項目,我們都可以修改到服務器的tomcat的配置文件。具體代碼如下:

       1: Connector port="8080" maxHttpHeaderSize="8192"
       2:                maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
       3:                enableLookups="false" redirectPort="8443" acceptCount="100"
       4:                connectionTimeout="20000" disableUploadTimeout="true" uRIEncoding="gbk"/>

    還是覺得老方法管用,只是有點麻煩:

       1: String id=new String(request.getParameter("id").getBytes("ISO8859-1"),"UTF-8");
       2: String name = new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");

    posted @ 2007-10-25 23:23 wonderer 閱讀(13435) | 評論 (1)編輯 收藏

    主站蜘蛛池模板: 999久久久免费精品国产| 久久久久亚洲?V成人无码| 日韩在线a视频免费播放| 91麻豆国产自产在线观看亚洲| 亚洲国产精品久久久久婷婷老年| 亚洲一级毛片免观看| 香蕉国产在线观看免费| 亚洲免费闲人蜜桃| 亚洲中文字幕第一页在线| 国产黄色免费观看| 日本免费网站观看| 猫咪免费观看人成网站在线| 精品国产无限资源免费观看| 亚洲videos| 日韩电影免费在线| 美女被暴羞羞免费视频| 久久久久亚洲AV成人网| 毛片在线播放免费观看| 在线观看亚洲天天一三视| 精品无码一级毛片免费视频观看| 日韩伦理片电影在线免费观看| 国产成人精品日本亚洲语音 | 免费无码一区二区三区蜜桃大| 国产精品亚洲аv无码播放| 国产成人精品亚洲| 黄网址在线永久免费观看 | 国产精品永久免费10000| 亚洲黄色片免费看| 日韩欧美亚洲中文乱码| 国产日本一线在线观看免费| 亚洲一区二区中文| 日本视频在线观看永久免费| 亚洲人色婷婷成人网站在线观看 | 亚洲国产日韩在线视频| 最近免费中文字幕mv在线电影 | 啦啦啦完整版免费视频在线观看| 亚洲AV永久青草无码精品| a级毛片免费播放| 色影音免费色资源| 国产精品亚洲一区二区三区在线观看 | 四虎影视永久在线精品免费|