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

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

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

    小明思考

    Just a software engineer
    posts - 124, comments - 36, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

         摘要: Java 控制臺中文問題  閱讀全文

    posted @ 2012-01-19 16:18 小明 閱讀(3716) | 評論 (1)編輯 收藏

    最近開發的一個通用網絡爬蟲平臺,主要是想滿足自己想從特定網站抓取大量內容的需求,有如下特點:

    1. 支持cookie/session,所以支持登錄論壇和網站
    2. 支持圖像識別,可以由人工識別或者機器識別
    3. 多線程下載,性能不錯
    4. 支持代理
    5. 支持HTTPS和證書驗證
    6. 支持可插拔腳本,對特別網站使用特別的腳本(javascript編寫)。
    7. 有Web界面,操作方便

    項目位置:http://code.google.com/p/ssnaker/
    下載:http://ssnaker.googlecode.com/files/snaker_1.00_b7.zip

    最新的版本也實現一個火車票刷票的功能(具體實現都放在engines/train.js)


    posted @ 2012-01-13 15:45 小明 閱讀(3237) | 評論 (1)編輯 收藏

    原題:
    http://community.topcoder.com/stat?c=problem_statement&pm=164&rd=50

    Class Name: Prerequisites

    Mathod Name: orderClasses

    Parameters: String[]

    Returns: String[]

     

    You are a student at a college with the most unbelievably complex prerequisite

    structure ever. To help you schedule your classes, you decided to put together

    a program that returns the order in which the classes should be taken. 

     

    Implement a class Prerequisites which contains a method orderClasses. The

    method takes a String[] that contains the classes you must take and returns a

    String[] of classes in the order the classes should be taken so that all

    prerequisites are met.

     

    String[] elements will be of the form (and TopCoder will ensure this):

    "CLASS: PRE1 PRE2 ..." where PRE1 and PRE2 are prerequisites of CLASS. CLASS,

    PRE1, PRE2, ... consist of a department name (3 or 4 capital letters, A-Z

    inclusive) followed by a class number (an integer between 100 and 999,

    inclusive). The department name should be immediately followed by the class

    number with no additional characters, numbers or spaces (i.e. MATH217). It is

    not necessary for a class to have prerequisites. In such a case, the colon is

    the last character in the String. 

     

    You can only take one class at a time, therefore, use the following rules to

    determine which class to take :

    1) Any prerequisite class(es) listed for a class must be taken before the class

    can be taken.

    2) If multiple classes can be taken at the same time, you take the one with the

    lowest number first, regardless of department.

    3) If multiple classes with the same number can be taken at the same time, you

    take the department name which comes first in alphabetical order. 

    4) If the inputted course schedule has errors, return a String[] of length 0.

    There is an error if it is impossible to return the classes in an order such

    that all prerequisites are met, or if a prerequisite is a course that does not

    have its own entry in the inputted String[].

     

    Examples of valid input Strings are:

    "CSE111: CSE110 MATH101"

    "CSE110:"

     

    Examples of invalid input Strings are:

    "CS117:" (department name must consist of 3 - 4 capital letters, inclusive)

    "cs117:" (department name must consist of 3 - 4 capital letters, inclusive)

    "CS9E11:" (department name must be letters only)

    "CSE110: " (no trailing spaces allowed)

    "CSE110: CSE101 " (no trailing spaces allowed)

    "MATH211: MAM2222" (class number to large)

    "MATH211: MAM22" (class number to small)

    "ENGIN517: MATH211" (department name to large)

     

    Here is the method signature (be sure your method is public):

    String[] orderClasses(String[] classSchedule);

     

    TopCoder will make sure classSchedule contains between 1 and 20 Strings,

    inclusive, all of the form above. The Strings will have between 1 and 50

    characters, inclusive. TopCoder will check that the syntax of the Strings are

    correct: The Strings will contain a valid class name, followed by a colon,

    possibly followed by a series of unique prerequisite classes separated by

    single spaces. Also, TopCoder will ensure that each class has at most one

    entry in the String[].

     

    Examples:

    If classSchedule={

    "CSE121: CSE110",

    "CSE110:",

    "MATH122:",

    }

    The method should return: {"CSE110","CSE121","MATH122"}

     

    If classSchedule={

    "ENGL111: ENGL110",

    "ENGL110: ENGL111"

    }

    The method should return: {}

     

    If classSchedule=[

    "ENGL111: ENGL110"

    }

    The method should return: {}

     

    If classSchedule={

    "CSE258: CSE244 CSE243 INTR100"

    "CSE221: CSE254 INTR100"

    "CSE254: CSE111 MATH210 INTR100"

    "CSE244: CSE243 MATH210 INTR100"

    "MATH210: INTR100"

    "CSE101: INTR100"

    "CSE111: INTR100"

    "ECE201: CSE111 INTR100"

    "ECE111: INTR100"

    "CSE243: CSE254"

    "INTR100:"

    }

    The method should return:

    {"INTR100","CSE101","CSE111","ECE111","ECE201","MATH210","CSE254","CSE221","CSE2

    43","CSE244","CSE258"}

     

     

    Definition

              

    Class:      Prerequisites

    Method:   orderClasses

    Parameters:     String[]

    Returns: String[]

    Method signature:   String[] orderClasses(String[] param0)

    (be sure your method is public)


    ------------------------------------------------------------我的解法如下----------------------------------------

    想法很簡單,這道題本質上是一道排序問題,我們只需要定義好排序的邏輯,然后應用快排就可以了。


    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    public class Prerequisites {
        
    private static final String[] EMPTY = {};
        Map
    <String,Klass> classes = new HashMap<String,Klass>();
        
        
    static class Klass implements Comparable<Klass>{
            String name;
            
    int number;
            String dept;
            List
    <Klass> pres = new ArrayList<Klass>();
            
    boolean exist = false;
            
            Klass(String name){
                
    this.name = name;
                
    int len = name.length();
                
    this.number = Integer.parseInt(name.substring(len-3));
                
    this.dept =name.substring(0,len-3);
            }
            
            
    private boolean isPre(Klass k){
                
    if(k==thisreturn false;
                
                
    for(Klass p:this.pres){
                    
    if(k == p || p.isPre(k)) return true;
                }
                
    return false;
            }

            @Override
            
    public int compareTo(Klass that) {
                
    boolean pre = this.isPre(that);
                
    boolean sub = that.isPre(this);
                
                
    if(pre && sub){
                    
    throw new RuntimeException("circle detected");
                }
                
    else if(pre){
                    
    return 1;
                }
                
    else if(sub){
                    
    return -1;
                }
                
    if(this.number!=that.number) return this.number-that.number;
                
    return this.dept.compareTo(that.dept);
            }
        }
        
        
    private Klass getClass(String name){
            Klass k 
    = classes.get(name);
            
    if(k==null){
                k 
    = new Klass(name);
                classes.put(name, k);
            }
            
    return k;
        }
        
        
    public String[] orderClasses(String[] classSchedule){
            classes.clear();
            //parse the input
            
    for(String s:classSchedule){
                
    int idx = s.indexOf(":");
                String name 
    = s.substring(0,idx);
                Klass k 
    = getClass(name);
                k.exist 
    = true;
                
    if(idx!=s.length()-1){
                    String[] pres 
    = s.substring(idx+1).split(" ");
                    
    for(String pre:pres){
                        
    if(pre.length()>0){
                            Klass p 
    = getClass(pre);
                            k.pres.add(p);
                        }
                    }
                }
            }
            
            Klass [] sortedClasses 
    =  (Klass[]) classes.values().toArray(new Klass[0]);
            
    for(Klass k:sortedClasses){
                
    if(!k.exist){
                    
    return EMPTY;
                }
            }
            
    try {
                Arrays.sort(sortedClasses);
            } 
    catch (Exception e) {
                
    return EMPTY;
            }
            String[] result 
    = new String[sortedClasses.length];
            
    int c = 0;
            
    for(Klass k:sortedClasses){
                result[c
    ++= k.name;
            }
            
    return result;
        }
    }


    posted @ 2011-10-25 13:28 小明 閱讀(1823) | 評論 (3)編輯 收藏

    Here is my some recommendations for java i18n .

    1.  The correct way to handle text-based resource files for localization

     Use java.util.ResourceBoundle to read resource from file.

    e.g.
     Local local = Local.CHINA;
     ResourceBundle rb = ResourceBundle.getBundle("test", local);
     String title = rb.getString("helloworld.title");
     System.out.println(title);

     //The program will read file: test_zh.properties
     # This locale is zh_CN
     # helloworld.title=中文1234
     and the file should use native2ascii program to convert (native2ascii.exe is in JDK)
     # This locale is zh_CN
     helloworld.title=\u4f60\u597d1234

     if you don't use native2ascii  to covert,you must covert it in the java program,like this:
     ResourceBundle rb = ResourceBundle.getBundle("test", Locale.CHINA);
         String title = rb.getString("helloworld.title");
        System.out.println(new String(title.getBytes("8859_1")));  //covert to os/jvm default charset

    2.       Locale driven date and time display
     
     Use java.text.DateFormat to format date string
    e.g.
     DateFormat df = DateFormat.getDateInstance(DateFormat.FULL,Locale.CHINA);
     String date = df.format(new Date());
        System.out.println(date);

     DateFormat df2 = DateFormat.getDateTimeInstance(DateFormat.DEFAULT,DateFormat.DEFAULT,Locale.CHINA);
     String datetime = df2.format(new Date());
        System.out.println(datetime);

    3.       JSP localization method.

    1) native method:
     use "Local local = request.getLocale();" to get the page accessor's local info
     then use ResourceBoundle to read local resource
     and page should use utf-8 charset
     
    e.g.
    <%@ page contentType="text/html; charset=utf-8" %>
    <%
    Local local = request.getLocale();
    ResourceBundle rb = ResourceBundle.getBundle("test", local);
    String title = rb.getString("helloworld.title");
    %>
    <html>
    <head>
    <title>test</title>
    </head>
    <body bgcolor="#ffffff">
    <h1><%=title%></h1>
    </body>
    </html>
    notice:put the  test_zh.properties into directionary WEB_INF/classes

    2)use jsp taglib to simplify the page

     the Jakarta i18n taglib is a good choice. http://jakarta.apache.org/taglibs/doc/i18n-doc/index.html
    e.g.
    <%@ page contentType="text/html; charset=utf-8"%>
    <%@ taglib uri="<i18n:bundle baseName="test" id="test" localeRef="userLocale"
                 scope="request"
                 changeResponseLocale="false"/>
    <html>
    <head>
    <title>test</title>
    </head>
    <body bgcolor="#ffffff">
    <h1><i18n:message key="helloworld.title" /></h1>
    </body>
    </html>

    3)use j2ee web framework(Struts) to simplify

     the Struts web framework supply i18n support
     Please refer:
    http://www.allapplabs.com/struts/struts_internationalization.htm

    posted @ 2005-12-19 17:26 小明 閱讀(1129) | 評論 (1)編輯 收藏


    java blog:  http://www.tkk7.com/sandy

    cpp blog:  http://www.cppblog.com/sandy

    歡迎參觀。

    posted @ 2005-12-06 10:08 小明 閱讀(457) | 評論 (0)編輯 收藏

    僅列出標題
    共5頁: 上一頁 1 2 3 4 5 
    主站蜘蛛池模板: 亚洲伦另类中文字幕| 亚洲乱码中文字幕手机在线| 亚洲网址在线观看你懂的| 一级成人毛片免费观看| 亚洲欧洲精品成人久久曰影片| 色五月五月丁香亚洲综合网| 午夜免费不卡毛片完整版| 中文字幕无码精品亚洲资源网久久 | 亚洲AV永久无码精品网站在线观看| 国产桃色在线成免费视频| 精品亚洲AV无码一区二区三区| 国产1024精品视频专区免费| 在线aⅴ亚洲中文字幕| 日韩免费视频一区| 看成年女人免费午夜视频| 亚洲中文字幕视频国产| 国产免费AV片在线观看| 久久亚洲sm情趣捆绑调教| 国产精品永久免费10000| 亚洲欧美成aⅴ人在线观看| 亚洲精品无码永久在线观看| 99久久国产精品免费一区二区 | 免费视频成人国产精品网站| 国产精品亚洲视频| 一区二区三区无码视频免费福利| 亚洲美女一区二区三区| 免费在线观看的网站| 国产精品亚洲а∨天堂2021| 精品亚洲永久免费精品| 青青青国产在线观看免费网站| WWW国产亚洲精品久久麻豆| 亚洲色精品vr一区二区三区| 最近2022中文字幕免费视频| 亚洲成a人无码亚洲成av无码| 亚洲一区二区高清| 中文字幕在线免费观看| 亚洲精品国产suv一区88| 亚洲人成人无码网www电影首页| 亚洲精品免费网站| 国产成人无码免费看片软件| 亚洲国产日韩在线人成下载|