J2EE常用工具类(转载)

1.Json工具

ExpandedBlockStart.gif 代码
package  cn.org.jshuwei.j2ee.util;

import  java.beans.IntrospectionException;
import  java.beans.Introspector;
import  java.beans.PropertyDescriptor;
import  java.util.ArrayList;
import  java.util.Date;
import  java.util.HashMap;
import  java.util.Iterator;
import  java.util.List;
import  java.util.Map;
import  java.util.Set;

import  net.sf.json.JSONArray;
import  net.sf.json.JSONObject;

/**
* Json工具类,实现了实体类和Json数据格式之间的互转功能 使用实例:<br>

* <pre>
* User类:
* package cn.org.jshuwei.j2ee.util.test;

* public class User {
*     private String userName;
*     private String userPass;
*     private Integer userAge;
*     
*     public User(){
*         
*     }
*     
*     public User(String userName, String userPass, int userAge) {
*         super();
*         this.userName = userName;
*         this.userPass = userPass;
*         this.userAge = userAge;
*     }
*     
*     public String getUserName() {
*         return userName;
*     }
*     public void setUserName(String userName) {
*         this.userName = userName;
*     }
*     public String getUserPass() {
*         return userPass;
*     }
*     public void setUserPass(String userPass) {
*         this.userPass = userPass;
*     }
*     public Integer getUserAge() {
*         return userAge;
*     }
*     public void setUserAge(Integer userAge) {
*         this.userAge = userAge;
*     }

*     @Override
*     public String toString() {
*         return "name->"+this.userName+";pass->"+this.userPass+";age->"+this.userAge;
*     }
* }

* 测试调用类:
* package cn.org.jshuwei.j2ee.util.test;

* import cn.org.jshuwei.j2ee.util.JsonUtils;

* public class Test {

*     public static void main(String[] args) {
*         String str1 = "{userName:'huwei', userAge:23, userPass:'123'}";
*         String str2 = "[{'userAge':23,'userName':'huwei','userPass':'123'},{'userAge':32,'userName':'jshuwei','userPass':'pass'},{'userAge':'','userName':'userName','userPass':''}]";
*         User u = (User)JsonUtils.json2Object(str1, User.class);
*         System.out.println("u-->"+u);
*         Object[] objs = JsonUtils.json2ObjectArray(str2);
*         for(Object obj : objs){
*             User u1 = (User)JsonUtils.json2Object(obj.toString(), User.class);
*             System.out.println(u1);
*         }
*     }    
* }

* </pre>

@author  huwei(jshuwei.org.cn)

*/
public   class  JsonUtils {
    
/**
     * 将一个实体类对象转换成Json数据格式
     * 
     * 
@param  bean
     *            需要转换的实体类对象
     * 
@return  转换后的Json格式字符串
     
*/
    
public   static  String beanToJson(Object bean) {
        StringBuilder json 
=   new  StringBuilder();
        json.append(
" { " );
        PropertyDescriptor[] props 
=   null ;
        
try  {
            props 
=  Introspector.getBeanInfo(bean.getClass(), Object. class )
                    .getPropertyDescriptors();
        } 
catch  (IntrospectionException e) {
        }
        
if  (props  !=   null ) {
            
for  ( int  i  =   0 ; i  <  props.length; i ++ ) {
                
try  {
                    String name 
=  objectToJson(props[i].getName());
                    String value 
=  objectToJson(props[i].getReadMethod()
                            .invoke(bean));
                    json.append(name);
                    json.append(
" : " );
                    json.append(value);
                    json.append(
" , " );
                } 
catch  (Exception e) {
                }
            }
            json.setCharAt(json.length() 
-   1 ' } ' );
        } 
else  {
            json.append(
" } " );
        }
        
return  json.toString();
    }

    
/**
     * 将一个List对象转换成Json数据格式返回
     * 
     * 
@param  list
     *            需要进行转换的List对象
     * 
@return  转换后的Json数据格式字符串
     
*/
    
public   static  String listToJson(List <?>  list) {
        StringBuilder json 
=   new  StringBuilder();
        json.append(
" [ " );
        
if  (list  !=   null   &&  list.size()  >   0 ) {
            
for  (Object obj : list) {
                json.append(objectToJson(obj));
                json.append(
" , " );
            }
            json.setCharAt(json.length() 
-   1 ' ] ' );
        } 
else  {
            json.append(
" ] " );
        }
        
return  json.toString();
    }

    
/**
     * 将一个对象数组转换成Json数据格式返回
     * 
     * 
@param  array
     *            需要进行转换的数组对象
     * 
@return  转换后的Json数据格式字符串
     
*/
    
public   static  String arrayToJson(Object[] array) {
        StringBuilder json 
=   new  StringBuilder();
        json.append(
" [ " );
        
if  (array  !=   null   &&  array.length  >   0 ) {
            
for  (Object obj : array) {
                json.append(objectToJson(obj));
                json.append(
" , " );
            }
            json.setCharAt(json.length() 
-   1 ' ] ' );
        } 
else  {
            json.append(
" ] " );
        }
        
return  json.toString();
    }

    
/**
     * 将一个Map对象转换成Json数据格式返回
     * 
     * 
@param  map
     *            需要进行转换的Map对象
     * 
@return  转换后的Json数据格式字符串
     
*/
    
public   static  String mapToJson(Map <? ?>  map) {
        StringBuilder json 
=   new  StringBuilder();
        json.append(
" { " );
        
if  (map  !=   null   &&  map.size()  >   0 ) {
            
for  (Object key : map.keySet()) {
                json.append(objectToJson(key));
                json.append(
" : " );
                json.append(objectToJson(map.get(key)));
                json.append(
" , " );
            }
            json.setCharAt(json.length() 
-   1 ' } ' );
        } 
else  {
            json.append(
" } " );
        }
        
return  json.toString();
    }

    
/**
     * 将一个Set对象转换成Json数据格式返回
     * 
     * 
@param  set
     *            需要进行转换的Set对象
     * 
@return  转换后的Json数据格式字符串
     
*/
    
public   static  String setToJson(Set <?>  set) {
        StringBuilder json 
=   new  StringBuilder();
        json.append(
" [ " );
        
if  (set  !=   null   &&  set.size()  >   0 ) {
            
for  (Object obj : set) {
                json.append(objectToJson(obj));
                json.append(
" , " );
            }
            json.setCharAt(json.length() 
-   1 ' ] ' );
        } 
else  {
            json.append(
" ] " );
        }
        
return  json.toString();
    }

    
private   static  String numberToJson(Number number) {
        
return  number.toString();
    }

    
private   static  String booleanToJson(Boolean bool) {
        
return  bool.toString();
    }

    
private   static  String nullToJson() {
        
return   "" ;
    }

    
private   static  String stringToJson(String s) {
        
if  (s  ==   null ) {
            
return  nullToJson();
        }
        StringBuilder sb 
=   new  StringBuilder();
        
for  ( int  i  =   0 ; i  <  s.length(); i ++ ) {
            
char  ch  =  s.charAt(i);
            
switch  (ch) {
            
case   ' " ' :
                sb.append(
" \\\ "" );
                 break ;
            
case   ' \\ ' :
                sb.append(
" \\\\ " );
                
break ;
            
case   ' \b ' :
                sb.append(
" \\b " );
                
break ;
            
case   ' \f ' :
                sb.append(
" \\f " );
                
break ;
            
case   ' \n ' :
                sb.append(
" \\n " );
                
break ;
            
case   ' \r ' :
                sb.append(
" \\r " );
                
break ;
            
case   ' \t ' :
                sb.append(
" \\t " );
                
break ;
            
case   ' / ' :
                sb.append(
" \\/ " );
                
break ;
            
default :
                
if  (ch  >=   ' \u0000 '   &&  ch  <=   ' \u001F ' ) {
                    String ss 
=  Integer.toHexString(ch);
                    sb.append(
" \\u " );
                    
for  ( int  k  =   0 ; k  <   4   -  ss.length(); k ++ ) {
                        sb.append(
' 0 ' );
                    }
                    sb.append(ss.toUpperCase());
                } 
else  {
                    sb.append(ch);
                }
            }
        }
        
return  sb.toString();
    }

    
private   static  String objectToJson(Object obj) {
        StringBuilder json 
=   new  StringBuilder();
        
if  (obj  ==   null ) {
            json.append(
" \ " \ "" );
        } 
else   if  (obj  instanceof  Number) {
            json.append(numberToJson((Number) obj));
        } 
else   if  (obj  instanceof  Boolean) {
            json.append(booleanToJson((Boolean) obj));
        } 
else   if  (obj  instanceof  String) {
            json.append(
" \ "" ).append(stringToJson(obj.toString())).append( " \ "" );
        } 
else   if  (obj  instanceof  Object[]) {
            json.append(arrayToJson((Object[]) obj));
        } 
else   if  (obj  instanceof  List) {
            json.append(listToJson((List
<?> ) obj));
        } 
else   if  (obj  instanceof  Map) {
            json.append(mapToJson((Map
<? ?> ) obj));
        } 
else   if  (obj  instanceof  Set) {
            json.append(setToJson((Set
<?> ) obj));
        } 
else  {
            json.append(beanToJson(obj));
        }
        
return  json.toString();
    }

    
//  ============================================================================================

    
/**
     * 将Json格式的字符串转换成指定的对象返回
     * 
     * 
@param  jsonString
     *            Json格式的字符串
     * 
@param  pojoCalss
     *            转换后的对象类型
     * 
@return  转换后的对象
     
*/
    @SuppressWarnings(
" unchecked " )
    
public   static  Object json2Object(String jsonString, Class pojoCalss) {
        Object pojo;
        JSONObject jsonObject 
=  JSONObject.fromObject(jsonString);
        pojo 
=  JSONObject.toBean(jsonObject, pojoCalss);
        
return  pojo;
    }

    
/**
     * 将Json格式的字符串转换成Map<String,Object>对象返回
     * 
     * 
@param  jsonString
     *            需要进行转换的Json格式字符串
     * 
@return  转换后的Map<String,Object>对象
     
*/
    @SuppressWarnings(
" unchecked " )
    
public   static  Map < String, Object >  json2Map(String jsonString) {
        JSONObject jsonObject 
=  JSONObject.fromObject(jsonString);
        Iterator keyIter 
=  jsonObject.keys();
        String key;
        Object value;
        Map
< String, Object >  valueMap  =   new  HashMap < String, Object > ();
        
while  (keyIter.hasNext()) {
            key 
=  (String) keyIter.next();
            value 
=  jsonObject.get(key);
            valueMap.put(key, value);
        }
        
return  valueMap;
    }

    
/**
     * 将Json格式的字符串转换成对象数组返回
     * 
     * 
@param  jsonString
     *            需要进行转换的Json格式字符串
     * 
@return  转换后的对象数组
     
*/
    
public   static  Object[] json2ObjectArray(String jsonString) {
        JSONArray jsonArray 
=  JSONArray.fromObject(jsonString);
        
return  jsonArray.toArray();
    }

    
/**
     * 将Json格式的字符串转换成指定对象组成的List返回
     * 
     * 
@param  jsonString
     *            Json格式的字符串
     * 
@param  pojoClass
     *            转换后的List中对象类型
     * 
@return  转换后的List对象
     
*/
    @SuppressWarnings(
" unchecked " )
    
public   static  List json2List(String jsonString, Class pojoClass) {
        JSONArray jsonArray 
=  JSONArray.fromObject(jsonString);
        JSONObject jsonObject;
        Object pojoValue;
        List list 
=   new  ArrayList();
        
for  ( int  i  =   0 ; i  <  jsonArray.size(); i ++ ) {
            jsonObject 
=  jsonArray.getJSONObject(i);
            pojoValue 
=  JSONObject.toBean(jsonObject, pojoClass);
            list.add(pojoValue);
        }
        
return  list;
    }

    
/**
     * 将Json格式的字符串转换成字符串数组返回
     * 
     * 
@param  jsonString
     *            需要进行转换的Json格式字符串
     * 
@return  转换后的字符串数组
     
*/
    
public   static  String[] json2StringArray(String jsonString) {
        JSONArray jsonArray 
=  JSONArray.fromObject(jsonString);
        String[] stringArray 
=   new  String[jsonArray.size()];
        
for  ( int  i  =   0 ; i  <  jsonArray.size(); i ++ ) {
            stringArray[i] 
=  jsonArray.getString(i);
        }
        
return  stringArray;
    }

    
/**
     * 将Json格式的字符串转换成Long数组返回
     * 
     * 
@param  jsonString
     *            需要进行转换的Json格式字符串
     * 
@return  转换后的Long数组
     
*/
    
public   static  Long[] json2LongArray(String jsonString) {
        JSONArray jsonArray 
=  JSONArray.fromObject(jsonString);
        Long[] longArray 
=   new  Long[jsonArray.size()];
        
for  ( int  i  =   0 ; i  <  jsonArray.size(); i ++ ) {
            longArray[i] 
=  jsonArray.getLong(i);
        }
        
return  longArray;
    }

    
/**
     * 将Json格式的字符串转换成Integer数组返回
     * 
     * 
@param  jsonString
     *            需要进行转换的Json格式字符串
     * 
@return  转换后的Integer数组
     
*/
    
public   static  Integer[] json2IntegerArray(String jsonString) {
        JSONArray jsonArray 
=  JSONArray.fromObject(jsonString);
        Integer[] integerArray 
=   new  Integer[jsonArray.size()];
        
for  ( int  i  =   0 ; i  <  jsonArray.size(); i ++ ) {
            integerArray[i] 
=  jsonArray.getInt(i);
        }
        
return  integerArray;
    }

    
/**
     * 将Json格式的字符串转换成日期数组返回
     * 
     * 
@param  jsonString
     *            需要进行转换的Json格式字符串
     * 
@param  DataFormat
     *            返回的日期格式
     * 
@return  转换后的日期数组
     
*/
    
public   static  Date[] json2DateArray(String jsonString, String DataFormat) {
        JSONArray jsonArray 
=  JSONArray.fromObject(jsonString);
        Date[] dateArray 
=   new  Date[jsonArray.size()];
        String dateString;
        Date date;
        
for  ( int  i  =   0 ; i  <  jsonArray.size(); i ++ ) {
            dateString 
=  jsonArray.getString(i);
            date 
=  DateUtil.parseDate(dateString, DataFormat);
            dateArray[i] 
=  date;

        }
        
return  dateArray;
    }

    
/**
     * 将Json格式的字符串转换成Double数组返回
     * 
     * 
@param  jsonString
     *            需要进行转换的Json格式字符串
     * 
@return  转换后的Double数组
     
*/
    
public   static  Double[] json2DoubleArray(String jsonString) {
        JSONArray jsonArray 
=  JSONArray.fromObject(jsonString);
        Double[] doubleArray 
=   new  Double[jsonArray.size()];
        
for  ( int  i  =   0 ; i  <  jsonArray.size(); i ++ ) {
            doubleArray[i] 
=  jsonArray.getDouble(i);
        }
        
return  doubleArray;
    }
}

 

2.hibernate操作

 

ExpandedBlockStart.gif 代码
package  cn.org.jshuwei.j2ee.util;

import  java.io.Serializable;

import  org.hibernate.HibernateException;
import  org.hibernate.Session;
import  org.hibernate.SessionFactory;
import  org.hibernate.cfg.Configuration;

/**

* Hibernate操作的工具类

@author  huwei(jshuwei.org.cn)
@since  1.0

*/
public   class  HbnUtil {
    
private   static  SessionFactory sf;

    
/**
     * 得到SessionFactory
     * 
     * 
@since  1.0
     * 
@return  返回SessionFactory
     
*/
    
public   static  SessionFactory getSessionFactory() {
        
if  (sf  ==   null   ||  sf.isClosed()) {
            
try  {
                sf 
=   new  Configuration().configure().buildSessionFactory();
            } 
catch  (HibernateException e) {
                e.printStackTrace();
            }
        }
        
return  sf;
    }

    
/**
     * 得到Session
     * 
     * 
@since  1.0
     * 
@return  返回Session
     
*/
    
public   static  Session getSession() {
        getSessionFactory();
        
return  sf.openSession();
    }

    
/**
     * 释放SessionFactory
     * 
     * 
@since  1.0
     
*/
    
public   static   void  releaseSessionFactory() {
        
if  (sf  !=   null   &&   ! sf.isClosed()) {
            sf.close();
        }
    }

    
/**
     * 保存对象
     * 
     * 
@since  1.0
     * 
@param  obj
     *            需要保存的对象
     
*/
    
public   static  Serializable add(Object obj) {
        Session session 
=   null ;
        Serializable ret 
=   null ;
        
try  {
            session 
=  getSession();
            session.beginTransaction();
            ret 
=  session.save(obj);
            session.getTransaction().commit();
        } 
catch  (HibernateException e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        } 
finally  {
            
if  (session  !=   null ) {
                session.close();
            }
            releaseSessionFactory();
        }
        
return  ret;
    }

    
/**
     * 删除对象
     * 
     * 
@since  1.0
     * 
@param  obj
     *            需要删除的对象
     
*/
    
public   static   void  delete(Object obj) {
        Session session 
=   null ;
        
try  {
            session 
=  getSession();
            session.beginTransaction();
            session.delete(obj);
            session.getTransaction().commit();
        } 
catch  (HibernateException e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        } 
finally  {
            
if  (session  !=   null ) {
                session.close();
            }
            releaseSessionFactory();
        }
    }

    
/**
     * 更新对象
     * 
     * 
@since  1.0
     * 
@param  obj
     *            需要更新的对象
     
*/
    
public   static   void  update(Object obj) {
        Session session 
=   null ;
        
try  {
            session 
=  getSession();
            session.beginTransaction();
            session.update(obj);
            session.getTransaction().commit();
        } 
catch  (HibernateException e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        } 
finally  {
            
if  (session  !=   null ) {
                session.close();
            }
            releaseSessionFactory();
        }
    }

    
/**
     * 查找对象
     * 
     * 
@since  1.0
     * 
@param  clazz 需要查找的对象类型
     * 
@param  id
     *            需要查找的对象的id
     
*/
    
public   static  Object find(Class clazz,Serializable id) {
        Session session 
=   null ;
        Object obj
= null ;
        
try  {
            session 
=  getSession();
            obj
= session.get(clazz, id);
        } 
catch  (HibernateException e) {
            e.printStackTrace();
        } 
finally  {
            
if  (session  !=   null ) {
                session.close();
            }
            releaseSessionFactory();
        }
        
return  obj;
    }
}

 

3.数组操作类

ExpandedBlockStart.gif 代码
package  cn.org.jshuwei.j2ee.util;

/**

* 数组操作的工具类(以int型数组为例)

* <b>排序算法的分类如下:</b><br /> 1.插入排序(直接插入排序、折半插入排序、希尔排序); <br />
* 2.交换排序(冒泡泡排序、快速排序);<br /> 3.选择排序(直接选择排序、堆排序);<br /> 4.归并排序; <br /> 5.基数排序。<br
* />

* <b>关于排序方法的选择:</b><br /> (1)若n较小(如n≤50),可采用直接插入或直接选择排序。<br />
* (2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜;<br />
* (3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。<br />

@author  huwei(jshuwei.org.cn)
@since  1.1

*/
public   class  ArrayUtil {
    
/**
     * 交换数组中两元素
     * 
     * 
@since  1.1
     * 
@param  ints
     *            需要进行交换操作的数组
     * 
@param  x
     *            数组中的位置1
     * 
@param  y
     *            数组中的位置2
     * 
@return  交换后的数组
     
*/
    
public   static   int [] swap( int [] ints,  int  x,  int  y) {
        
int  temp  =  ints[x];
        ints[x] 
=  ints[y];
        ints[y] 
=  temp;
        
return  ints;
    }

    
/**
     * 冒泡排序 方法:相邻两元素进行比较 性能:比较次数O(n^2),n^2/2;交换次数O(n^2),n^2/4
     * 
     * 
@since  1.1
     * 
@param  source
     *            需要进行排序操作的数组
     * 
@return  排序后的数组
     
*/
    
public   static   int [] bubbleSort( int [] source) {
        
for  ( int  i  =   1 ; i  <  source.length; i ++ ) {
            
for  ( int  j  =   0 ; j  <  i; j ++ ) {
                
if  (source[j]  >  source[j  +   1 ]) {
                    swap(source, j, j 
+   1 );
                }
            }
        }
        
return  source;
    }

    
/**
     * 直接选择排序法 方法:每一趟从待排序的数据元素中选出最小(或最大)的一个元素, 顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
     * 性能:比较次数O(n^2),n^2/2 交换次数O(n),n
     * 交换次数比冒泡排序少多了,由于交换所需CPU时间比比较所需的CUP时间多,所以选择排序比冒泡排序快。
     * 但是N比较大时,比较所需的CPU时间占主要地位,所以这时的性能和冒泡排序差不太多,但毫无疑问肯定要快些。
     * 
     * 
@since  1.1
     * 
@param  source
     *            需要进行排序操作的数组
     * 
@return  排序后的数组
     
*/
    
public   static   int [] selectSort( int [] source) {

        
for  ( int  i  =   0 ; i  <  source.length; i ++ ) {
            
for  ( int  j  =  i  +   1 ; j  <  source.length; j ++ ) {
                
if  (source[i]  >  source[j]) {
                    swap(source, i, j);
                }
            }
        }
        
return  source;
    }

    
/**
     * 插入排序 方法:将一个记录插入到已排好序的有序表(有可能是空表)中,从而得到一个新的记录数增1的有序表。 性能:比较次数O(n^2),n^2/4
     * 复制次数O(n),n^2/4 比较次数是前两者的一般,而复制所需的CPU时间较交换少,所以性能上比冒泡排序提高一倍多,而比选择排序也要快。
     * 
     * 
@since  1.1
     * 
@param  source
     *            需要进行排序操作的数组
     * 
@return  排序后的数组
     
*/
    
public   static   int [] insertSort( int [] source) {

        
for  ( int  i  =   1 ; i  <  source.length; i ++ ) {
            
for  ( int  j  =  i; (j  >   0 &&  (source[j]  <  source[j  -   1 ]); j -- ) {
                swap(source, j, j 
-   1 );
            }
        }
        
return  source;
    }

    
/**
     * 快速排序 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。 步骤为:
     * 1. 从数列中挑出一个元素,称为 "基准"(pivot), 2.
     * 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面
     * (相同的数可以到任一边)。在这个分割之后,该基准是它的最后位置。这个称为分割(partition)操作。 3.
     * 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
     * 递回的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了
     * 。虽然一直递回下去,但是这个算法总会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。
     * 
     * 
@since  1.1
     * 
@param  source
     *            需要进行排序操作的数组
     * 
@return  排序后的数组
     
*/
    
public   static   int [] quickSort( int [] source) {
        
return  qsort(source,  0 , source.length  -   1 );
    }

    
/**
     * 快速排序的具体实现,排正序
     * 
     * 
@since  1.1
     * 
@param  source
     *            需要进行排序操作的数组
     * 
@param  low
     *            开始低位
     * 
@param  high
     *            结束高位
     * 
@return  排序后的数组
     
*/
    
private   static   int [] qsort( int  source[],  int  low,  int  high) {
        
int  i, j, x;
        
if  (low  <  high) {
            i 
=  low;
            j 
=  high;
            x 
=  source[i];
            
while  (i  <  j) {
                
while  (i  <  j  &&  source[j]  >  x) {
                    j
-- ;
                }
                
if  (i  <  j) {
                    source[i] 
=  source[j];
                    i
++ ;
                }
                
while  (i  <  j  &&  source[i]  <  x) {
                    i
++ ;
                }
                
if  (i  <  j) {
                    source[j] 
=  source[i];
                    j
-- ;
                }
            }
            source[i] 
=  x;
            qsort(source, low, i 
-   1 );
            qsort(source, i 
+   1 , high);
        }
        
return  source;
    }

    
/**
     * 二分法查找 查找线性表必须是有序列表
     * 
     * 
@since  1.1
     * 
@param  source
     *            需要进行查找操作的数组
     * 
@param  key
     *            需要查找的值
     * 
@return  需要查找的值在数组中的位置,若未查到则返回-1
     
*/
    
public   int  binarySearch( int [] source,  int  key) {
        
int  low  =   0 , high  =  source.length  -   1 , mid;
        
while  (low  <=  high) {
            mid 
=  (low  +  high)  >>>   1 ;
            
if  (key  ==  source[mid]) {
                
return  mid;
            } 
else   if  (key  <  source[mid]) {
                high 
=  mid  -   1 ;
            } 
else  {
                low 
=  mid  +   1 ;
            }
        }
        
return   - 1 ;
    }

    
/**
     * 反转数组
     * 
     * 
@since  1.1
     * 
@param  source
     *            需要进行反转操作的数组
     * 
@return  反转后的数组
     
*/
    
public   static   int [] reverse( int [] source) {
        
int  length  =  source.length;
        
int  temp  =   0 ;
        
for  ( int  i  =   0 ; i  <  length  /   2 ; i ++ ) {
            temp 
=  source[i];
            source[i] 
=  source[length  -   1   -  i];
            source[length 
-   1   -  i]  =  temp;
        }
        
return  source;
    }
}

 

4.文件打包解包处理类

 

ExpandedBlockStart.gif 代码
package  cn.org.jshuwei.j2ee.util;

import  java.io.File;
import  java.io.FileInputStream;
import  java.io.FileOutputStream;
import  java.io.IOException;
import  java.io.InputStream;
import  java.util.Enumeration;

import  org.apache.tools.zip.ZipEntry;
import  org.apache.tools.zip.ZipFile;
import  org.apache.tools.zip.ZipOutputStream;

/**
* 文件压缩解压工具类

@author  huwei(jshuwei.org.cn)
@since  1.2

*/
public   class  ZipUtil {
    
/**
     * 压缩ZIP文件,将baseDirName目录下的所有文件压缩到targetFileName.ZIP文件中
     * 
     * 
@param  baseDirName
     *            需要压缩的文件的跟目录
     * 
@param  targetFileName
     *            压缩有生成的文件名
     
*/
    
public   static   void  zipFile(String baseDirName, String targetFileName) {
        
if  (baseDirName  ==   null ) {
            
return ;
        }
        File file 
=   new  File(baseDirName);
        
if  ( ! file.exists()) {
            
return ;
        }
        String baseDirPath 
=  file.getAbsolutePath();
        File targetFile 
=   new  File(targetFileName);
        
try  {
            ZipOutputStream out 
=   new  ZipOutputStream( new  FileOutputStream(
                    targetFile));
            
if  (file.isFile()) {
                fileToZip(baseDirPath, file, out);
            } 
else  {
                dirToZip(baseDirPath, file, out);
            }
            out.close();
        } 
catch  (IOException e) {
            e.printStackTrace();
        }
    }

    
/**
     * 解压缩ZIP文件,将ZIP文件里的内容解压到targetBaseDirName目录下
     * 
     * 
@param  zipFileName
     *            待解压缩的ZIP文件名
     * 
@param  targetBaseDirName
     *            目标目录
     
*/
    @SuppressWarnings(
" unchecked " )
    
public   static   void  unzipFile(String zipFileName, String targetBaseDirName) {
        
if  ( ! targetBaseDirName.endsWith(File.separator)) {
            targetBaseDirName 
+=  File.separator;
        }
        
try  {
            ZipFile zipFile 
=   new  ZipFile(zipFileName);
            ZipEntry entry 
=   null ;
            String entryName 
=   null ;
            String targetFileName 
=   null ;
            
byte [] buffer  =   new   byte [ 4096 ];
            
int  bytes_read;
            Enumeration entrys 
=  zipFile.getEntries(); // .entries();
             while  (entrys.hasMoreElements()) {
                entry 
=  (ZipEntry) entrys.nextElement();
                entryName 
=  entry.getName();
                targetFileName 
=  targetBaseDirName  +  entryName;
                
if  (entry.isDirectory()) {
                    
new  File(targetFileName).mkdirs();
                    
continue ;
                } 
else  {
                    
new  File(targetFileName).getParentFile().mkdirs();
                }
                File targetFile 
=   new  File(targetFileName);
                FileOutputStream os 
=   new  FileOutputStream(targetFile);
                InputStream is 
=  zipFile.getInputStream(entry);
                
while  ((bytes_read  =  is.read(buffer))  !=   - 1 ) {
                    os.write(buffer, 
0 , bytes_read);
                }
                os.close();
                is.close();
            }
        } 
catch  (IOException e) {
            e.printStackTrace();
        }
    }

    
private   static   void  dirToZip(String baseDirPath, File dir,
            ZipOutputStream out) {
        
if  (dir.isDirectory()) {
            File[] files 
=  dir.listFiles();
            
if  (files.length  ==   0 ) {
                ZipEntry entry 
=   new  ZipEntry(getEntryName(baseDirPath, dir));
                
try  {
                    out.putNextEntry(entry);
                    out.closeEntry();
                } 
catch  (IOException e) {
                    e.printStackTrace();
                }
                
return ;
            }
            
for  ( int  i  =   0 ; i  <  files.length; i ++ ) {
                
if  (files[i].isFile()) {
                    fileToZip(baseDirPath, files[i], out);
                } 
else  {
                    dirToZip(baseDirPath, files[i], out);
                }
            }
        }
    }

    
private   static   void  fileToZip(String baseDirPath, File file,
            ZipOutputStream out) {
        FileInputStream in 
=   null ;
        ZipEntry entry 
=   null ;
        
byte [] buffer  =   new   byte [ 4096 ];
        
int  bytes_read;
        
if  (file.isFile()) {
            
try  {
                in 
=   new  FileInputStream(file);
                entry 
=   new  ZipEntry(getEntryName(baseDirPath, file));
                out.putNextEntry(entry);
                
while  ((bytes_read  =  in.read(buffer))  !=   - 1 ) {
                    out.write(buffer, 
0 , bytes_read);
                }
                out.closeEntry();
                in.close();
            } 
catch  (IOException e) {
                e.printStackTrace();
            }
        }
    }

    
private   static  String getEntryName(String baseDirPath, File file) {
        
if  ( ! baseDirPath.endsWith(File.separator)) {
            baseDirPath 
+=  File.separator;
        }
        String filePath 
=  file.getAbsolutePath();
        
if  (file.isDirectory()) {
            filePath 
+=   " / " ;
        }
        
int  index  =  filePath.indexOf(baseDirPath);
        
return  filePath.substring(index  +  baseDirPath.length());
    }
}

 

 

5.文件操作类

 

ExpandedBlockStart.gif 代码
import  java.io.BufferedReader;
import  java.io.BufferedWriter;
import  java.io.File;
import  java.io.FileInputStream;
import  java.io.FileOutputStream;
import  java.io.FileReader;
import  java.io.FileWriter;
import  java.io.IOException;
import  java.io.InputStream;
import  java.io.InputStreamReader;
import  java.io.OutputStreamWriter;
import  java.util.ArrayList;
import  java.util.List;

/**
* 文件操作工具类

@author  jshuwei.org.cn" target="_blank">huwei(jsjshuwei.org.cn" target="_blank">huwei.org.cn)
@since  1.2

*/
public   class  FileUtil {
    
/**
     * 将字节流转换成字符串返回
     * 
     * 
@param  is
     *            输入流
     * 
@return  字符串
     
*/
    
public   static  String readFileByLines(InputStream is) {
        BufferedReader reader 
=   null ;
        StringBuffer sb 
=   new  StringBuffer();
        
try  {
            reader 
=   new  BufferedReader( new  InputStreamReader(is));
            String tempString 
=   null ;
            
while  ((tempString  =  reader.readLine())  !=   null ) {
                sb.append(tempString 
+   " \n " );
            }
            reader.close();
        } 
catch  (IOException e) {
            e.printStackTrace();
        } 
finally  {
            
if  (reader  !=   null ) {
                
try  {
                    reader.close();
                } 
catch  (IOException e1) {
                }
            }
        }
        
return  sb.toString();
    }

    
/**
     * 将文件一行一行的读成List返回
     * 
     * 
@param  file
     *            需要读取的文件
     * 
@return  文件的一行就是一个List的Item的返回
     
*/
    
public   static  List < String >  readFileToList(File file) {
        BufferedReader reader 
=   null ;
        List
< String >  list  =   new  ArrayList < String > ();
        
try  {
            reader 
=   new  BufferedReader( new  FileReader(file));
            String tempString 
=   null ;
            
while  ((tempString  =  reader.readLine())  !=   null ) {
                list.add(tempString);
            }
            reader.close();
        } 
catch  (IOException e) {
            e.printStackTrace();
        } 
finally  {
            
if  (reader  !=   null ) {
                
try  {
                    reader.close();
                } 
catch  (IOException e1) {
                }
            }
        }
        
return  list;
    }

    
/**
     * 将文件按照一定的编码方式一行一行的读成List返回
     * 
     * 
@param  file
     *            需要读取的文件
     * 
@param  encodType
     *            字符编码
     * 
@return  文件的一行就是一个List的Item的返回
     
*/
    
public   static  List < String >  readFileToList(File file, String encodType) {
        BufferedReader reader 
=   null ;
        List
< String >  list  =   new  ArrayList < String > ();
        
try  {
            reader 
=   new  BufferedReader( new  InputStreamReader(
                    
new  FileInputStream(file), encodType));
            String tempString 
=   null ;
            
while  ((tempString  =  reader.readLine())  !=   null ) {
                
if  ( ! (tempString.charAt( 0 >=   ' a '   &&  tempString.charAt( 0 <=   ' z ' ))
                    tempString 
=  tempString.substring( 1 );
                list.add(tempString);
            }
            reader.close();
        } 
catch  (IOException e) {
            e.printStackTrace();
        } 
finally  {
            
if  (reader  !=   null ) {
                
try  {
                    reader.close();
                } 
catch  (IOException e1) {
                }
            }
        }
        
return  list;
    }

    
/**
     * 将指定的字符串内容以指定的方式写入到指定的文件中
     * 
     * 
@param  file
     *            需要写人的文件
     * 
@param  content
     *            需要写入的内容
     * 
@param  flag
     *            是否追加写入
     
*/
    
public   static   void  writeFile(File file, String content, Boolean flag) {
        
try  {
            
if  ( ! file.exists())
                file.createNewFile();
            FileWriter writer 
=   new  FileWriter(file, flag);
            writer.write(content);
            writer.close();
        } 
catch  (IOException e) {
            e.printStackTrace();
        }
    }

    
/**
     * 将指定的字符串内容以指定的方式及编码写入到指定的文件中
     * 
     * 
@param  file
     *            需要写人的文件
     * 
@param  content
     *            需要写入的内容
     * 
@param  flag
     *            是否追加写入
     * 
@param  encodType
     *            文件编码
     
*/
    
public   static   void  writeFile(File file, String content, Boolean flag,
            String encodType) {
        
try  {
            FileOutputStream writerStream 
=   new  FileOutputStream(file, flag);
            BufferedWriter writer 
=   new  BufferedWriter( new  OutputStreamWriter(
                    writerStream, encodType));
            writer.write(content);
            writer.close();
        } 
catch  (Exception e) {
            e.printStackTrace();
        }
    }

    
/**
     * 拷贝文件夹
     * 
     * 
@param  oldPath
     *            源目录
     * 
@param  newPath
     *            目标目录
     
*/
    
public   static   void  copyFolder(String oldPath, String newPath) {
        
try  {
            (
new  File(newPath)).mkdirs();
            File a 
=   new  File(oldPath);
            String[] file 
=  a.list();
            File temp 
=   null ;
            
for  ( int  i  =   0 ; i  <  file.length; i ++ ) {
                
if  (oldPath.endsWith(File.separator)) {
                    temp 
=   new  File(oldPath  +  file[i]);
                } 
else  {
                    temp 
=   new  File(oldPath  +  File.separator  +  file[i]);
                }
                
if  (temp.isFile()) {
                    FileInputStream input 
=   new  FileInputStream(temp);
                    FileOutputStream output 
=   new  FileOutputStream(newPath
                            
+   " / "   +  (temp.getName()).toString());
                    
byte [] b  =   new   byte [ 1024   *   5 ];
                    
int  len;
                    
while  ((len  =  input.read(b))  !=   - 1 ) {
                        output.write(b, 
0 , len);
                    }
                    output.flush();
                    output.close();
                    input.close();
                }
                
if  (temp.isDirectory()) {
                    copyFolder(oldPath 
+   " / "   +  file[i], newPath  +   " / "   +  file[i]);
                }
            }
        } 
catch  (Exception e) {
            e.printStackTrace();
        }
    }

    
/**
     * 将文件重命名
     * 
     * 
@param  oldName
     *            源文件名
     * 
@param  newName
     *            新文件名
     
*/
    
public   static   void  reName(String oldName, String newName) {
        File oldF 
=   new  File(oldName);
        File newF 
=   new  File(newName);
        oldF.renameTo(newF);
    }

    
/**
     * 将一个文件列表文件中所有文件拷贝到指定目录中
     * 
     * 
@param  listFile
     *            包含需要拷贝的文件的列表的文件,每个文件写在一行
     * 
@param  targetFloder
     *            目标目录
     
*/
    
public   static   void  copyFilesFromList(String listFile, String targetFloder) {
        BufferedReader reader 
=   null ;
        
try  {
            reader 
=   new  BufferedReader( new  FileReader(listFile));
            String tempString 
=   null ;
            
while  ((tempString  =  reader.readLine())  !=   null ) {
                copyFile(tempString, targetFloder);
            }
            reader.close();
        } 
catch  (IOException e) {
            e.printStackTrace();
        } 
finally  {
            
if  (reader  !=   null ) {
                
try  {
                    reader.close();
                } 
catch  (IOException e1) {
                }
            }
        }
    }

    
/**
     * 拷贝文件
     * 
     * 
@param  oldPath
     *            源文件
     * 
@param  newPath
     *            目标文件
     
*/
    
public   static   void  copyFile(String oldPath, String newPath) {
        
try  {
            File temp 
=   new  File(oldPath);
            FileInputStream input 
=   new  FileInputStream(temp);
            FileOutputStream output 
=   new  FileOutputStream(newPath  +   " / "
                    
+  (temp.getName()).toString());
            
byte [] b  =   new   byte [ 1024   *   5 ];
            
int  len;
            
while  ((len  =  input.read(b))  !=   - 1 ) {
                output.write(b, 
0 , len);
            }
            output.flush();
            output.close();
            input.close();
        } 
catch  (Exception e) {
            e.printStackTrace();
        }
    }

    
/**
     * 删除文件列表
     * 
     * 
@param  files
     *            需要删除的文件/文件夹列表
     * 
@return  删除成功true,否则返回false
     
*/
    
public   static   boolean  deleteFiles(List < String >  files) {
        
boolean  flag  =   true ;
        
for  (String file : files) {
            flag 
=  delete(file);
            
if  ( ! flag)
                
break ;
        }
        
return  flag;
    }

    
/**
     * 删除文件或文件夹
     * 
     * 
@param  fileName
     *            要删除的文件名
     * 
@return  删除成功返回true,否则返回false
     
*/
    
public   static   boolean  delete(String fileName) {
        File file 
=   new  File(fileName);
        
if  ( ! file.exists()) {
            
return   false ;
        } 
else  {
            
if  (file.isFile())
                
return  deleteFile(fileName);
            
else
                
return  deleteDirectory(fileName);
        }
    }

    
/**
     * 删除文件
     * 
     * 
@param  fileName
     *            要删除的文件的文件名
     * 
@return  删除成功返回true,否则返回false
     
*/
    
public   static   boolean  deleteFile(String fileName) {
        File file 
=   new  File(fileName);
        
if  (file.exists()  &&  file.isFile())
            
return  file.delete();
        
return   false ;
    }

    
/**
     * 删除目录及目录下的文件
     * 
     * 
@param  dir
     *            要删除的目录路径
     * 
@return  删除成功返回true,否则返回false
     
*/
    
public   static   boolean  deleteDirectory(String dir) {
        
if  ( ! dir.endsWith(File.separator))
            dir 
=  dir  +  File.separator;
        File dirFile 
=   new  File(dir);
        
if  (( ! dirFile.exists())  ||  ( ! dirFile.isDirectory()))
            
return   false ;
        
boolean  flag  =   true ;
        File[] files 
=  dirFile.listFiles();
        
for  ( int  i  =   0 ; i  <  files.length; i ++ ) {
            
if  (files[i].isFile()) {
                flag 
=  deleteFile(files[i].getAbsolutePath());
                
if  ( ! flag)
                    
break ;
            } 
else   if  (files[i].isDirectory()) {
                flag 
=  deleteDirectory(files[i].getAbsolutePath());
                
if  ( ! flag)
                    
break ;
            }
        }
        
if  ( ! flag) {
            
return   false ;
        }
        
return  dirFile.delete();
    }
}

 

 

6.字符串处理类


/**

* 字符串操作的工具类

@author  huwei(jshuwei.org.cn)
@since  1.0

*/
public   class  StringUtil {
    
private   static  String strChineseFirstPY  =   " YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSCDQLDYLYBSSJGYZZJJFKCCLZDHWDWZJLJPFYYNWJJTMYHZWZHFLZPPQHGSCYYYNJQYXXGJHHSDSJNKKTMOMLCRXYPSNQSECCQZGGLLYJLMYZZSECYKYYHQWJSSGGYXYZYJWWKDJHYCHMYXJTLXJYQBYXZLDWRDJRWYSRLDZJPCBZJJBRCFTLECZSTZFXXZHTRQHYBDLYCZSSYMMRFMYQZPWWJJYFCRWFDFZQPYDDWYXKYJAWJFFXYPSFTZYHHYZYSWCJYXSCLCXXWZZXNBGNNXBXLZSZSBSGPYSYZDHMDZBQBZCWDZZYYTZHBTSYYBZGNTNXQYWQSKBPHHLXGYBFMJEBJHHGQTJCYSXSTKZHLYCKGLYSMZXYALMELDCCXGZYRJXSDLTYZCQKCNNJWHJTZZCQLJSTSTBNXBTYXCEQXGKWJYFLZQLYHYXSPSFXLMPBYSXXXYDJCZYLLLSJXFHJXPJBTFFYABYXBHZZBJYZLWLCZGGBTSSMDTJZXPTHYQTGLJSCQFZKJZJQNLZWLSLHDZBWJNCJZYZSQQYCQYRZCJJWYBRTWPYFTWEXCSKDZCTBZHYZZYYJXZCFFZZMJYXXSDZZOTTBZLQWFCKSZSXFYRLNYJMBDTHJXSQQCCSBXYYTSYFBXDZTGBCNSLCYZZPSAZYZZSCJCSHZQYDXLBPJLLMQXTYDZXSQJTZPXLCGLQTZWJBHCTSYJSFXYEJJTLBGXSXJMYJQQPFZASYJNTYDJXKJCDJSZCBARTDCLYJQMWNQNCLLLKBYBZZSYHQQLTWLCCXTXLLZNTYLNEWYZYXCZXXGRKRMTCNDNJTSYYSSDQDGHSDBJGHRWRQLYBGLXHLGTGXBQJDZPYJSJYJCTMRNYMGRZJCZGJMZMGXMPRYXKJNYMSGMZJYMKMFXMLDTGFBHCJHKYLPFMDXLQJJSMTQGZSJLQDLDGJYCALCMZCSDJLLNXDJFFFFJCZFMZFFPFKHKGDPSXKTACJDHHZDDCRRCFQYJKQCCWJDXHWJLYLLZGCFCQDSMLZPBJJPLSBCJGGDCKKDEZSQCCKJGCGKDJTJDLZYCXKLQSCGJCLTFPCQCZGWPJDQYZJJBYJHSJDZWGFSJGZKQCCZLLPSPKJGQJHZZLJPLGJGJJTHJJYJZCZMLZLYQBGJWMLJKXZDZNJQSYZMLJLLJKYWXMKJLHSKJGBMCLYYMKXJQLBMLLKMDXXKWYXYSLMLPSJQQJQXYXFJTJDXMXXLLCXQBSYJBGWYMBGGBCYXPJYGPEPFGDJGBHBNSQJYZJKJKHXQFGQZKFHYGKHDKLLSDJQXPQYKYBNQSXQNSZSWHBSXWHXWBZZXDMNSJBSBKBBZKLYLXGWXDRWYQZMYWSJQLCJXXJXKJEQXSCYETLZHLYYYSDZPAQYZCMTLSHTZCFYZYXYLJSDCJQAGYSLCQLYYYSHMRQQKLDXZSCSSSYDYCJYSFSJBFRSSZQSBXXPXJYSDRCKGJLGDKZJZBDKTCSYQPYHSTCLDJDHMXMCGXYZHJDDTMHLTXZXYLYMOHYJCLTYFBQQXPFBDFHHTKSQHZYYWCNXXCRWHOWGYJLEGWDQCWGFJYCSNTMYTOLBYGWQWESJPWNMLRYDZSZTXYQPZGCWXHNGPYXSHMYQJXZTDPPBFYHZHTJYFDZWKGKZBLDNTSXHQEEGZZYLZMMZYJZGXZXKHKSTXNXXWYLYAPSTHXDWHZYMPXAGKYDXBHNHXKDPJNMYHYLPMGOCSLNZHKXXLPZZLBMLSFBHHGYGYYGGBHSCYAQTYWLXTZQCEZYDQDQMMHTKLLSZHLSJZWFYHQSWSCWLQAZYNYTLSXTHAZNKZZSZZLAXXZWWCTGQQTDDYZTCCHYQZFLXPSLZYGPZSZNGLNDQTBDLXGTCTAJDKYWNSYZLJHHZZCWNYYZYWMHYCHHYXHJKZWSXHZYXLYSKQYSPSLYZWMYPPKBYGLKZHTYXAXQSYSHXASMCHKDSCRSWJPWXSGZJLWWSCHSJHSQNHCSEGNDAQTBAALZZMSSTDQJCJKTSCJAXPLGGXHHGXXZCXPDMMHLDGTYBYSJMXHMRCPXXJZCKZXSHMLQXXTTHXWZFKHCCZDYTCJYXQHLXDHYPJQXYLSYYDZOZJNYXQEZYSQYAYXWYPDGXDDXSPPYZNDLTWRHXYDXZZJHTCXMCZLHPYYYYMHZLLHNXMYLLLMDCPPXHMXDKYCYRDLTXJCHHZZXZLCCLYLNZSHZJZZLNNRLWHYQSNJHXYNTTTKYJPYCHHYEGKCTTWLGQRLGGTGTYGYHPYHYLQYQGCWYQKPYYYTTTTLHYHLLTYTTSPLKYZXGZWGPYDSSZZDQXSKCQNMJJZZBXYQMJRTFFBTKHZKBXLJJKDXJTLBWFZPPTKQTZTGPDGNTPJYFALQMKGXBDCLZFHZCLLLLADPMXDJHLCCLGYHDZFGYDDGCYYFGYDXKSSEBDHYKDKDKHNAXXYBPBYYHXZQGAFFQYJXDMLJCSQZLLPCHBSXGJYNDYBYQSPZWJLZKSDDTACTBXZDYZYPJZQSJNKKTKNJDJGYYPGTLFYQKASDNTCYHBLWDZHBBYDWJRYGKZYHEYYFJMSDTYFZJJHGCXPLXHLDWXXJKYTCYKSSSMTWCTTQZLPBSZDZWZXGZAGYKTYWXLHLSPBCLLOQMMZSSLCMBJCSZZKYDCZJGQQDSMCYTZQQLWZQZXSSFPTTFQMDDZDSHDTDWFHTDYZJYQJQKYPBDJYYXTLJHDRQXXXHAYDHRJLKLYTWHLLRLLRCXYLBWSRSZZSYMKZZHHKYHXKSMDSYDYCJPBZBSQLFCXXXNXKXWYWSDZYQOGGQMMYHCDZTTFJYYBGSTTTYBYKJDHKYXBELHTYPJQNFXFDYKZHQKZBYJTZBXHFDXKDASWTAWAJLDYJSFHBLDNNTNQJTJNCHXFJSRFWHZFMDRYJYJWZPDJKZYJYMPCYZNYNXFBYTFYFWYGDBNZZZDNYTXZEMMQBSQEHXFZMBMFLZZSRXYMJGSXWZJSPRYDJSJGXHJJGLJJYNZZJXHGXKYMLPYYYCXYTWQZSWHWLYRJLPXSLSXMFSWWKLCTNXNYNPSJSZHDZEPTXMYYWXYYSYWLXJQZQXZDCLEEELMCPJPCLWBXSQHFWWTFFJTNQJHJQDXHWLBYZNFJLALKYYJLDXHHYCSTYYWNRJYXYWTRMDRQHWQCMFJDYZMHMYYXJWMYZQZXTLMRSPWWCHAQBXYGZYPXYYRRCLMPYMGKSJSZYSRMYJSNXTPLNBAPPYPYLXYYZKYNLDZYJZCZNNLMZHHARQMPGWQTZMXXMLLHGDZXYHXKYXYCJMFFYYHJFSBSSQLXXNDYCANNMTCJCYPRRNYTYQNYYMBMSXNDLYLYSLJRLXYSXQMLLYZLZJJJKYZZCSFBZXXMSTBJGNXYZHLXNMCWSCYZYFZLXBRNNNYLBNRTGZQYSATSWRYHYJZMZDHZGZDWYBSSCSKXSYHYTXXGCQGXZZSHYXJSCRHMKKBXCZJYJYMKQHZJFNBHMQHYSNJNZYBKNQMCLGQHWLZNZSWXKHLJHYYBQLBFCDSXDLDSPFZPSKJYZWZXZDDXJSMMEGJSCSSMGCLXXKYYYLNYPWWWGYDKZJGGGZGGSYCKNJWNJPCXBJJTQTJWDSSPJXZXNZXUMELPXFSXTLLXCLJXJJLJZXCTPSWXLYDHLYQRWHSYCSQYYBYAYWJJJQFWQCQQCJQGXALDBZZYJGKGXPLTZYFXJLTPADKYQHPMATLCPDCKBMTXYBHKLENXDLEEGQDYMSAWHZMLJTWYGXLYQZLJEEYYBQQFFNLYXRDSCTGJGXYYNKLLYQKCCTLHJLQMKKZGCYYGLLLJDZGYDHZWXPYSJBZKDZGYZZHYWYFQYTYZSZYEZZLYMHJJHTSMQWYZLKYYWZCSRKQYTLTDXWCTYJKLWSQZWBDCQYNCJSRSZJLKCDCDTLZZZACQQZZDDXYPLXZBQJYLZLLLQDDZQJYJYJZYXNYYYNYJXKXDAZWYRDLJYYYRJLXLLDYXJCYWYWNQCCLDDNYYYNYCKCZHXXCCLGZQJGKWPPCQQJYSBZZXYJSQPXJPZBSBDSFNSFPZXHDWZTDWPPTFLZZBZDMYYPQJRSDZSQZSQXBDGCPZSWDWCSQZGMDHZXMWWFYBPDGPHTMJTHZSMMBGZMBZJCFZWFZBBZMQCFMBDMCJXLGPNJBBXGYHYYJGPTZGZMQBQTCGYXJXLWZKYDPDYMGCFTPFXYZTZXDZXTGKMTYBBCLBJASKYTSSQYYMSZXFJEWLXLLSZBQJJJAKLYLXLYCCTSXMCWFKKKBSXLLLLJYXTYLTJYYTDPJHNHNNKBYQNFQYYZBYYESSESSGDYHFHWTCJBSDZZTFDMXHCNJZYMQWSRYJDZJQPDQBBSTJGGFBKJBXTGQHNGWJXJGDLLTHZHHYYYYYYSXWTYYYCCBDBPYPZYCCZYJPZYWCBDLFWZCWJDXXHYHLHWZZXJTCZLCDPXUJCZZZLYXJJTXPHFXWPYWXZPTDZZBDZCYHJHMLXBQXSBYLRDTGJRRCTTTHYTCZWMXFYTWWZCWJWXJYWCSKYBZSCCTZQNHXNWXXKHKFHTSWOCCJYBCMPZZYKBNNZPBZHHZDLSYDDYTYFJPXYNGFXBYQXCBHXCPSXTYZDMKYSNXSXLHKMZXLYHDHKWHXXSSKQYHHCJYXGLHZXCSNHEKDTGZXQYPKDHEXTYKCNYMYYYPKQYYYKXZLTHJQTBYQHXBMYHSQCKWWYLLHCYYLNNEQXQWMCFBDCCMLJGGXDQKTLXKGNQCDGZJWYJJLYHHQTTTNWCHMXCXWHWSZJYDJCCDBQCDGDNYXZTHCQRXCBHZTQCBXWGQWYYBXHMBYMYQTYEXMQKYAQYRGYZSLFYKKQHYSSQYSHJGJCNXKZYCXSBXYXHYYLSTYCXQTHYSMGSCPMMGCCCCCMTZTASMGQZJHKLOSQYLSWTMXSYQKDZLJQQYPLSYCZTCQQPBBQJZCLPKHQZYYXXDTDDTSJCXFFLLCHQXMJLWCJCXTSPYCXNDTJSHJWXDQQJSKXYAMYLSJHMLALYKXCYYDMNMDQMXMCZNNCYBZKKYFLMCHCMLHXRCJJHSYLNMTJZGZGYWJXSRXCWJGJQHQZDQJDCJJZKJKGDZQGJJYJYLXZXXCDQHHHEYTMHLFSBDJSYYSHFYSTCZQLPBDRFRZTZYKYWHSZYQKWDQZRKMSYNBCRXQBJYFAZPZZEDZCJYWBCJWHYJBQSZYWRYSZPTDKZPFPBNZTKLQYHBBZPNPPTYZZYBQNYDCPJMMCYCQMCYFZZDCMNLFPBPLNGQJTBTTNJZPZBBZNJKLJQYLNBZQHKSJZNGGQSZZKYXSHPZSNBCGZKDDZQANZHJKDRTLZLSWJLJZLYWTJNDJZJHXYAYNCBGTZCSSQMNJPJYTYSWXZFKWJQTKHTZPLBHSNJZSYZBWZZZZLSYLSBJHDWWQPSLMMFBJDWAQYZTCJTBNNWZXQXCDSLQGDSDPDZHJTQQPSWLYYJZLGYXYZLCTCBJTKTYCZJTQKBSJLGMGZDMCSGPYNJZYQYYKNXRPWSZXMTNCSZZYXYBYHYZAXYWQCJTLLCKJJTJHGDXDXYQYZZBYWDLWQCGLZGJGQRQZCZSSBCRPCSKYDZNXJSQGXSSJMYDNSTZTPBDLTKZWXQWQTZEXNQCZGWEZKSSBYBRTSSSLCCGBPSZQSZLCCGLLLZXHZQTHCZMQGYZQZNMCOCSZJMMZSQPJYGQLJYJPPLDXRGZYXCCSXHSHGTZNLZWZKJCXTCFCJXLBMQBCZZWPQDNHXLJCTHYZLGYLNLSZZPCXDSCQQHJQKSXZPBAJYEMSMJTZDXLCJYRYYNWJBNGZZTMJXLTBSLYRZPYLSSCNXPHLLHYLLQQZQLXYMRSYCXZLMMCZLTZSDWTJJLLNZGGQXPFSKYGYGHBFZPDKMWGHCXMSGDXJMCJZDYCABXJDLNBCDQYGSKYDQTXDJJYXMSZQAZDZFSLQXYJSJZYLBTXXWXQQZBJZUFBBLYLWDSLJHXJYZJWTDJCZFQZQZZDZSXZZQLZCDZFJHYSPYMPQZMLPPLFFXJJNZZYLSJEYQZFPFZKSYWJJJHRDJZZXTXXGLGHYDXCSKYSWMMZCWYBAZBJKSHFHJCXMHFQHYXXYZFTSJYZFXYXPZLCHMZMBXHZZSXYFYMNCWDABAZLXKTCSHHXKXJJZJSTHYGXSXYYHHHJWXKZXSSBZZWHHHCWTZZZPJXSNXQQJGZYZYWLLCWXZFXXYXYHXMKYYSWSQMNLNAYCYSPMJKHWCQHYLAJJMZXHMMCNZHBHXCLXTJPLTXYJHDYYLTTXFSZHYXXSJBJYAYRSMXYPLCKDUYHLXRLNLLSTYZYYQYGYHHSCCSMZCTZQXKYQFPYYRPFFLKQUNTSZLLZMWWTCQQYZWTLLMLMPWMBZSSTZRBPDDTLQJJBXZCSRZQQYGWCSXFWZLXCCRSZDZMCYGGDZQSGTJSWLJMYMMZYHFBJDGYXCCPSHXNZCSBSJYJGJMPPWAFFYFNXHYZXZYLREMZGZCYZSSZDLLJCSQFNXZKPTXZGXJJGFMYYYSNBTYLBNLHPFZDCYFBMGQRRSSSZXYSGTZRNYDZZCDGPJAFJFZKNZBLCZSZPSGCYCJSZLMLRSZBZZLDLSLLYSXSQZQLYXZLSKKBRXBRBZCYCXZZZEEYFGKLZLYYHGZSGZLFJHGTGWKRAAJYZKZQTSSHJJXDCYZUYJLZYRZDQQHGJZXSSZBYKJPBFRTJXLLFQWJHYLQTYMBLPZDXTZYGBDHZZRBGXHWNJTJXLKSCFSMWLSDQYSJTXKZSCFWJLBXFTZLLJZLLQBLSQMQQCGCZFPBPHZCZJLPYYGGDTGWDCFCZQYYYQYSSCLXZSKLZZZGFFCQNWGLHQYZJJCZLQZZYJPJZZBPDCCMHJGXDQDGDLZQMFGPSYTSDYFWWDJZJYSXYYCZCYHZWPBYKXRYLYBHKJKSFXTZJMMCKHLLTNYYMSYXYZPYJQYCSYCWMTJJKQYRHLLQXPSGTLYYCLJSCPXJYZFNMLRGJJTYZBXYZMSJYJHHFZQMSYXRSZCWTLRTQZSSTKXGQKGSPTGCZNJSJCQCXHMXGGZTQYDJKZDLBZSXJLHYQGGGTHQSZPYHJHHGYYGKGGCWJZZYLCZLXQSFTGZSLLLMLJSKCTBLLZZSZMMNYTPZSXQHJCJYQXYZXZQZCPSHKZZYSXCDFGMWQRLLQXRFZTLYSTCTMJCXJJXHJNXTNRZTZFQYHQGLLGCXSZSJDJLJCYDSJTLNYXHSZXCGJZYQPYLFHDJSBPCCZHJJJQZJQDYBSSLLCMYTTMQTBHJQNNYGKYRQYQMZGCJKPDCGMYZHQLLSLLCLMHOLZGDYYFZSLJCQZLYLZQJESHNYLLJXGJXLYSYYYXNBZLJSSZCQQCJYLLZLTJYLLZLLBNYLGQCHXYYXOXCXQKYJXXXYKLXSXXYQXCYKQXQCSGYXXYQXYGYTQOHXHXPYXXXULCYEYCHZZCBWQBBWJQZSCSZSSLZYLKDESJZWMYMCYTSDSXXSCJPQQSQYLYYZYCMDJDZYWCBTJSYDJKCYDDJLBDJJSODZYSYXQQYXDHHGQQYQHDYXWGMMMAJDYBBBPPBCMUUPLJZSMTXERXJMHQNUTPJDCBSSMSSSTKJTSSMMTRCPLZSZMLQDSDMJMQPNQDXCFYNBFSDQXYXHYAYKQYDDLQYYYSSZBYDSLNTFQTZQPZMCHDHCZCWFDXTMYQSPHQYYXSRGJCWTJTZZQMGWJJTJHTQJBBHWZPXXHYQFXXQYWYYHYSCDYDHHQMNMTMWCPBSZPPZZGLMZFOLLCFWHMMSJZTTDHZZYFFYTZZGZYSKYJXQYJZQBHMBZZLYGHGFMSHPZFZSNCLPBQSNJXZSLXXFPMTYJYGBXLLDLXPZJYZJYHHZCYWHJYLSJEXFSZZYWXKZJLUYDTMLYMQJPWXYHXSKTQJEZRPXXZHHMHWQPWQLYJJQJJZSZCPHJLCHHNXJLQWZJHBMZYXBDHHYPZLHLHLGFWLCHYYTLHJXCJMSCPXSTKPNHQXSRTYXXTESYJCTLSSLSTDLLLWWYHDHRJZSFGXTSYCZYNYHTDHWJSLHTZDQDJZXXQHGYLTZPHCSQFCLNJTCLZPFSTPDYNYLGMJLLYCQHYSSHCHYLHQYQTMZYPBYWRFQYKQSYSLZDQJMPXYYSSRHZJNYWTQDFZBWWTWWRXCWHGYHXMKMYYYQMSMZHNGCEPMLQQMTCWCTMMPXJPJJHFXYYZSXZHTYBMSTSYJTTQQQYYLHYNPYQZLCYZHZWSMYLKFJXLWGXYPJYTYSYXYMZCKTTWLKSMZSYLMPWLZWXWQZSSAQSYXYRHSSNTSRAPXCPWCMGDXHXZDZYFJHGZTTSBJHGYZSZYSMYCLLLXBTYXHBBZJKSSDMALXHYCFYGMQYPJYCQXJLLLJGSLZGQLYCJCCZOTYXMTMTTLLWTGPXYMZMKLPSZZZXHKQYSXCTYJZYHXSHYXZKXLZWPSQPYHJWPJPWXQQYLXSDHMRSLZZYZWTTCYXYSZZSHBSCCSTPLWSSCJCHNLCGCHSSPHYLHFHHXJSXYLLNYLSZDHZXYLSXLWZYKCLDYAXZCMDDYSPJTQJZLNWQPSSSWCTSTSZLBLNXSMNYYMJQBQHRZWTYYDCHQLXKPZWBGQYBKFCMZWPZLLYYLSZYDWHXPSBCMLJBSCGBHXLQHYRLJXYSWXWXZSLDFHLSLYNJLZYFLYJYCDRJLFSYZFSLLCQYQFGJYHYXZLYLMSTDJCYHBZLLNWLXXYGYYHSMGDHXXHHLZZJZXCZZZCYQZFNGWPYLCPKPYYPMCLQKDGXZGGWQBDXZZKZFBXXLZXJTPJPTTBYTSZZDWSLCHZHSLTYXHQLHYXXXYYZYSWTXZKHLXZXZPYHGCHKCFSYHUTJRLXFJXPTZTWHPLYXFCRHXSHXKYXXYHZQDXQWULHYHMJTBFLKHTXCWHJFWJCFPQRYQXCYYYQYGRPYWSGSUNGWCHKZDXYFLXXHJJBYZWTSXXNCYJJYMSWZJQRMHXZWFQSYLZJZGBHYNSLBGTTCSYBYXXWXYHXYYXNSQYXMQYWRGYQLXBBZLJSYLPSYTJZYHYZAWLRORJMKSCZJXXXYXCHDYXRYXXJDTSQFXLYLTSFFYXLMTYJMJUYYYXLTZCSXQZQHZXLYYXZHDNBRXXXJCTYHLBRLMBRLLAXKYLLLJLYXXLYCRYLCJTGJCMTLZLLCYZZPZPCYAWHJJFYBDYYZSMPCKZDQYQPBPCJPDCYZMDPBCYYDYCNNPLMTMLRMFMMGWYZBSJGYGSMZQQQZTXMKQWGXLLPJGZBQCDJJJFPKJKCXBLJMSWMDTQJXLDLPPBXCWRCQFBFQJCZAHZGMYKPHYYHZYKNDKZMBPJYXPXYHLFPNYYGXJDBKXNXHJMZJXSTRSTLDXSKZYSYBZXJLXYSLBZYSLHXJPFXPQNBYLLJQKYGZMCYZZYMCCSLCLHZFWFWYXZMWSXTYNXJHPYYMCYSPMHYSMYDYSHQYZCHMJJMZCAAGCFJBBHPLYZYLXXSDJGXDHKXXTXXNBHRMLYJSLTXMRHNLXQJXYZLLYSWQGDLBJHDCGJYQYCMHWFMJYBMBYJYJWYMDPWHXQLDYGPDFXXBCGJSPCKRSSYZJMSLBZZJFLJJJLGXZGYXYXLSZQYXBEXYXHGCXBPLDYHWETTWWCJMBTXCHXYQXLLXFLYXLLJLSSFWDPZSMYJCLMWYTCZPCHQEKCQBWLCQYDPLQPPQZQFJQDJHYMMCXTXDRMJWRHXCJZYLQXDYYNHYYHRSLSRSYWWZJYMTLTLLGTQCJZYABTCKZCJYCCQLJZQXALMZYHYWLWDXZXQDLLQSHGPJFJLJHJABCQZDJGTKHSSTCYJLPSWZLXZXRWGLDLZRLZXTGSLLLLZLYXXWGDZYGBDPHZPBRLWSXQBPFDWOFMWHLYPCBJCCLDMBZPBZZLCYQXLDOMZBLZWPDWYYGDSTTHCSQSCCRSSSYSLFYBFNTYJSZDFNDPDHDZZMBBLSLCMYFFGTJJQWFTMTPJWFNLBZCMMJTGBDZLQLPYFHYYMJYLSDCHDZJWJCCTLJCLDTLJJCPDDSQDSSZYBNDBJLGGJZXSXNLYCYBJXQYCBYLZCFZPPGKCXZDZFZTJJFJSJXZBNZYJQTTYJYHTYCZHYMDJXTTMPXSPLZCDWSLSHXYPZGTFMLCJTYCBPMGDKWYCYZCDSZZYHFLYCTYGWHKJYYLSJCXGYWJCBLLCSNDDBTZBSCLYZCZZSSQDLLMQYYHFSLQLLXFTYHABXGWNYWYYPLLSDLDLLBJCYXJZMLHLJDXYYQYTDLLLBUGBFDFBBQJZZMDPJHGCLGMJJPGAEHHBWCQXAXHHHZCHXYPHJAXHLPHJPGPZJQCQZGJJZZUZDMQYYBZZPHYHYBWHAZYJHYKFGDPFQSDLZMLJXKXGALXZDAGLMDGXMWZQYXXDXXPFDMMSSYMPFMDMMKXKSYZYSHDZKXSYSMMZZZMSYDNZZCZXFPLSTMZDNMXCKJMZTYYMZMZZMSXHHDCZJEMXXKLJSTLWLSQLYJZLLZJSSDPPMHNLZJCZYHMXXHGZCJMDHXTKGRMXFWMCGMWKDTKSXQMMMFZZYDKMSCLCMPCGMHSPXQPZDSSLCXKYXTWLWJYAHZJGZQMCSNXYYMMPMLKJXMHLMLQMXCTKZMJQYSZJSYSZHSYJZJCDAJZYBSDQJZGWZQQXFKDMSDJLFWEHKZQKJPEYPZYSZCDWYJFFMZZYLTTDZZEFMZLBNPPLPLPEPSZALLTYLKCKQZKGENQLWAGYXYDPXLHSXQQWQCQXQCLHYXXMLYCCWLYMQYSKGCHLCJNSZKPYZKCQZQLJPDMDZHLASXLBYDWQLWDNBQCRYDDZTJYBKBWSZDXDTNPJDTCTQDFXQQMGNXECLTTBKPWSLCTYQLPWYZZKLPYGZCQQPLLKCCYLPQMZCZQCLJSLQZDJXLDDHPZQDLJJXZQDXYZQKZLJCYQDYJPPYPQYKJYRMPCBYMCXKLLZLLFQPYLLLMBSGLCYSSLRSYSQTMXYXZQZFDZUYSYZTFFMZZSMZQHZSSCCMLYXWTPZGXZJGZGSJSGKDDHTQGGZLLBJDZLCBCHYXYZHZFYWXYZYMSDBZZYJGTSMTFXQYXQSTDGSLNXDLRYZZLRYYLXQHTXSRTZNGZXBNQQZFMYKMZJBZYMKBPNLYZPBLMCNQYZZZSJZHJCTZKHYZZJRDYZHNPXGLFZTLKGJTCTSSYLLGZRZBBQZZKLPKLCZYSSUYXBJFPNJZZXCDWXZYJXZZDJJKGGRSRJKMSMZJLSJYWQSKYHQJSXPJZZZLSNSHRNYPZTWCHKLPSRZLZXYJQXQKYSJYCZTLQZYBBYBWZPQDWWYZCYTJCJXCKCWDKKZXSGKDZXWWYYJQYYTCYTDLLXWKCZKKLCCLZCQQDZLQLCSFQCHQHSFSMQZZLNBJJZBSJHTSZDYSJQJPDLZCDCWJKJZZLPYCGMZWDJJBSJQZSYZYHHXJPBJYDSSXDZNCGLQMBTSFSBPDZDLZNFGFJGFSMPXJQLMBLGQCYYXBQKDJJQYRFKZTJDHCZKLBSDZCFJTPLLJGXHYXZCSSZZXSTJYGKGCKGYOQXJPLZPBPGTGYJZGHZQZZLBJLSQFZGKQQJZGYCZBZQTLDXRJXBSXXPZXHYZYCLWDXJJHXMFDZPFZHQHQMQGKSLYHTYCGFRZGNQXCLPDLBZCSCZQLLJBLHBZCYPZZPPDYMZZSGYHCKCPZJGSLJLNSCDSLDLXBMSTLDDFJMKDJDHZLZXLSZQPQPGJLLYBDSZGQLBZLSLKYYHZTTNTJYQTZZPSZQZTLLJTYYLLQLLQYZQLBDZLSLYYZYMDFSZSNHLXZNCZQZPBWSKRFBSYZMTHBLGJPMCZZLSTLXSHTCSYZLZBLFEQHLXFLCJLYLJQCBZLZJHHSSTBRMHXZHJZCLXFNBGXGTQJCZTMSFZKJMSSNXLJKBHSJXNTNLZDNTLMSJXGZJYJCZXYJYJWRWWQNZTNFJSZPZSHZJFYRDJSFSZJZBJFZQZZHZLXFYSBZQLZSGYFTZDCSZXZJBQMSZKJRHYJZCKMJKHCHGTXKXQGLXPXFXTRTYLXJXHDTSJXHJZJXZWZLCQSBTXWXGXTXXHXFTSDKFJHZYJFJXRZSDLLLTQSQQZQWZXSYQTWGWBZCGZLLYZBCLMQQTZHZXZXLJFRMYZFLXYSQXXJKXRMQDZDMMYYBSQBHGZMWFWXGMXLZPYYTGZYCCDXYZXYWGSYJYZNBHPZJSQSYXSXRTFYZGRHZTXSZZTHCBFCLSYXZLZQMZLMPLMXZJXSFLBYZMYQHXJSXRXSQZZZSSLYFRCZJRCRXHHZXQYDYHXSJJHZCXZBTYNSYSXJBQLPXZQPYMLXZKYXLXCJLCYSXXZZLXDLLLJJYHZXGYJWKJRWYHCPSGNRZLFZWFZZNSXGXFLZSXZZZBFCSYJDBRJKRDHHGXJLJJTGXJXXSTJTJXLYXQFCSGSWMSBCTLQZZWLZZKXJMLTMJYHSDDBXGZHDLBMYJFRZFSGCLYJBPMLYSMSXLSZJQQHJZFXGFQFQBPXZGYYQXGZTCQWYLTLGWSGWHRLFSFGZJMGMGBGTJFSYZZGZYZAFLSSPMLPFLCWBJZCLJJMZLPJJLYMQDMYYYFBGYGYZMLYZDXQYXRQQQHSYYYQXYLJTYXFSFSLLGNQCYHYCWFHCCCFXPYLYPLLZYXXXXXKQHHXSHJZCFZSCZJXCPZWHHHHHAPYLQALPQAFYHXDYLUKMZQGGGDDESRNNZLTZGCHYPPYSQJJHCLLJTOLNJPZLJLHYMHEYDYDSQYCDDHGZUNDZCLZYZLLZNTNYZGSLHSLPJJBDGWXPCDUTJCKLKCLWKLLCASSTKZZDNQNTTLYYZSSYSSZZRYLJQKCQDHHCRXRZYDGRGCWCGZQFFFPPJFZYNAKRGYWYQPQXXFKJTSZZXSWZDDFBBXTBGTZKZNPZZPZXZPJSZBMQHKCYXYLDKLJNYPKYGHGDZJXXEAHPNZKZTZCMXCXMMJXNKSZQNMNLWBWWXJKYHCPSTMCSQTZJYXTPCTPDTNNPGLLLZSJLSPBLPLQHDTNJNLYYRSZFFJFQWDPHZDWMRZCCLODAXNSSNYZRESTYJWJYJDBCFXNMWTTBYLWSTSZGYBLJPXGLBOCLHPCBJLTMXZLJYLZXCLTPNCLCKXTPZJSWCYXSFYSZDKNTLBYJCYJLLSTGQCBXRYZXBXKLYLHZLQZLNZCXWJZLJZJNCJHXMNZZGJZZXTZJXYCYYCXXJYYXJJXSSSJSTSSTTPPGQTCSXWZDCSYFPTFBFHFBBLZJCLZZDBXGCXLQPXKFZFLSYLTUWBMQJHSZBMDDBCYSCCLDXYCDDQLYJJWMQLLCSGLJJSYFPYYCCYLTJANTJJPWYCMMGQYYSXDXQMZHSZXPFTWWZQSWQRFKJLZJQQYFBRXJHHFWJJZYQAZMYFRHCYYBYQWLPEXCCZSTYRLTTDMQLYKMBBGMYYJPRKZNPBSXYXBHYZDJDNGHPMFSGMWFZMFQMMBCMZZCJJLCNUXYQLMLRYGQZCYXZLWJGCJCGGMCJNFYZZJHYCPRRCMTZQZXHFQGTJXCCJEAQCRJYHPLQLSZDJRBCQHQDYRHYLYXJSYMHZYDWLDFRYHBPYDTSSCNWBXGLPZMLZZTQSSCPJMXXYCSJYTYCGHYCJWYRXXLFEMWJNMKLLSWTXHYYYNCMMCWJDQDJZGLLJWJRKHPZGGFLCCSCZMCBLTBHBQJXQDSPDJZZGKGLFQYWBZYZJLTSTDHQHCTCBCHFLQMPWDSHYYTQWCNZZJTLBYMBPDYYYXSQKXWYYFLXXNCWCXYPMAELYKKJMZZZBRXYYQJFLJPFHHHYTZZXSGQQMHSPGDZQWBWPJHZJDYSCQWZKTXXSQLZYYMYSDZGRXCKKUJLWPYSYSCSYZLRMLQSYLJXBCXTLWDQZPCYCYKPPPNSXFYZJJRCEMHSZMSXLXGLRWGCSTLRSXBZGBZGZTCPLUJLSLYLYMTXMTZPALZXPXJTJWTCYYZLBLXBZLQMYLXPGHDSLSSDMXMBDZZSXWHAMLCZCPJMCNHJYSNSYGCHSKQMZZQDLLKABLWJXSFMOCDXJRRLYQZKJMYBYQLYHETFJZFRFKSRYXFJTWDSXXSYSQJYSLYXWJHSNLXYYXHBHAWHHJZXWMYLJCSSLKYDZTXBZSYFDXGXZJKHSXXYBSSXDPYNZWRPTQZCZENYGCXQFJYKJBZMLJCMQQXUOXSLYXXLYLLJDZBTYMHPFSTTQQWLHOKYBLZZALZXQLHZWRRQHLSTMYPYXJJXMQSJFNBXYXYJXXYQYLTHYLQYFMLKLJTMLLHSZWKZHLJMLHLJKLJSTLQXYLMBHHLNLZXQJHXCFXXLHYHJJGBYZZKBXSCQDJQDSUJZYYHZHHMGSXCSYMXFEBCQWWRBPYYJQTYZCYQYQQZYHMWFFHGZFRJFCDPXNTQYZPDYKHJLFRZXPPXZDBBGZQSTLGDGYLCQMLCHHMFYWLZYXKJLYPQHSYWMQQGQZMLZJNSQXJQSYJYCBEHSXFSZPXZWFLLBCYYJDYTDTHWZSFJMQQYJLMQXXLLDTTKHHYBFPWTYYSQQWNQWLGWDEBZWCMYGCULKJXTMXMYJSXHYBRWFYMWFRXYQMXYSZTZZTFYKMLDHQDXWYYNLCRYJBLPSXCXYWLSPRRJWXHQYPHTYDNXHHMMYWYTZCSQMTSSCCDALWZTCPQPYJLLQZYJSWXMZZMMYLMXCLMXCZMXMZSQTZPPQQBLPGXQZHFLJJHYTJSRXWZXSCCDLXTYJDCQJXSLQYCLZXLZZXMXQRJMHRHZJBHMFLJLMLCLQNLDXZLLLPYPSYJYSXCQQDCMQJZZXHNPNXZMEKMXHYKYQLXSXTXJYYHWDCWDZHQYYBGYBCYSCFGPSJNZDYZZJZXRZRQJJYMCANYRJTLDPPYZBSTJKXXZYPFDWFGZZRPYMTNGXZQBYXNBUFNQKRJQZMJEGRZGYCLKXZDSKKNSXKCLJSPJYYZLQQJYBZSSQLLLKJXTBKTYLCCDDBLSPPFYLGYDTZJYQGGKQTTFZXBDKTYYHYBBFYTYYBCLPDYTGDHRYRNJSPTCSNYJQHKLLLZSLYDXXWBCJQSPXBPJZJCJDZFFXXBRMLAZHCSNDLBJDSZBLPRZTSWSBXBCLLXXLZDJZSJPYLYXXYFTFFFBHJJXGBYXJPMMMPSSJZJMTLYZJXSWXTYLEDQPJMYGQZJGDJLQJWJQLLSJGJGYGMSCLJJXDTYGJQJQJCJZCJGDZZSXQGSJGGCXHQXSNQLZZBXHSGZXCXYLJXYXYYDFQQJHJFXDHCTXJYRXYSQTJXYEFYYSSYYJXNCYZXFXMSYSZXYYSCHSHXZZZGZZZGFJDLTYLNPZGYJYZYYQZPBXQBDZTZCZYXXYHHSQXSHDHGQHJHGYWSZTMZMLHYXGEBTYLZKQWYTJZRCLEKYSTDBCYKQQSAYXCJXWWGSBHJYZYDHCSJKQCXSWXFLTYNYZPZCCZJQTZWJQDZZZQZLJJXLSBHPYXXPSXSHHEZTXFPTLQYZZXHYTXNCFZYYHXGNXMYWXTZSJPTHHGYMXMXQZXTSBCZYJYXXTYYZYPCQLMMSZMJZZLLZXGXZAAJZYXJMZXWDXZSXZDZXLEYJJZQBHZWZZZQTZPSXZTDSXJJJZNYAZPHXYYSRNQDTHZHYYKYJHDZXZLSWCLYBZYECWCYCRYLCXNHZYDZYDYJDFRJJHTRSQTXYXJRJHOJYNXELXSFSFJZGHPZSXZSZDZCQZBYYKLSGSJHCZSHDGQGXYZGXCHXZJWYQWGYHKSSEQZZNDZFKWYSSTCLZSTSYMCDHJXXYWEYXCZAYDMPXMDSXYBSQMJMZJMTZQLPJYQZCGQHXJHHLXXHLHDLDJQCLDWBSXFZZYYSCHTYTYYBHECXHYKGJPXHHYZJFXHWHBDZFYZBCAPNPGNYDMSXHMMMMAMYNBYJTMPXYYMCTHJBZYFCGTYHWPHFTWZZEZSBZEGPFMTSKFTYCMHFLLHGPZJXZJGZJYXZSBBQSCZZLZCCSTPGXMJSFTCCZJZDJXCYBZLFCJSYZFGSZLYBCWZZBYZDZYPSWYJZXZBDSYUXLZZBZFYGCZXBZHZFTPBGZGEJBSTGKDMFHYZZJHZLLZZGJQZLSFDJSSCBZGPDLFZFZSZYZYZSYGCXSNXXCHCZXTZZLJFZGQSQYXZJQDCCZTQCDXZJYQJQCHXZTDLGSCXZSYQJQTZWLQDQZTQCHQQJZYEZZZPBWKDJFCJPZTYPQYQTTYNLMBDKTJZPQZQZZFPZSBNJLGYJDXJDZZKZGQKXDLPZJTCJDQBXDJQJSTCKNXBXZMSLYJCQMTJQWWCJQNJNLLLHJCWQTBZQYDZCZPZZDZYDDCYZZZCCJTTJFZDPRRTZTJDCQTQZDTJNPLZBCLLCTZSXKJZQZPZLBZRBTJDCXFCZDBCCJJLTQQPLDCGZDBBZJCQDCJWYNLLZYZCCDWLLXWZLXRXNTQQCZXKQLSGDFQTDDGLRLAJJTKUYMKQLLTZYTDYYCZGJWYXDXFRSKSTQTENQMRKQZHHQKDLDAZFKYPBGGPZREBZZYKZZSPEGJXGYKQZZZSLYSYYYZWFQZYLZZLZHWCHKYPQGNPGBLPLRRJYXCCSYYHSFZFYBZYYTGZXYLXCZWXXZJZBLFFLGSKHYJZEYJHLPLLLLCZGXDRZELRHGKLZZYHZLYQSZZJZQLJZFLNBHGWLCZCFJYSPYXZLZLXGCCPZBLLCYBBBBUBBCBPCRNNZCZYRBFSRLDCGQYYQXYGMQZWTZYTYJXYFWTEHZZJYWLCCNTZYJJZDEDPZDZTSYQJHDYMBJNYJZLXTSSTPHNDJXXBYXQTZQDDTJTDYYTGWSCSZQFLSHLGLBCZPHDLYZJYCKWTYTYLBNYTSDSYCCTYSZYYEBHEXHQDTWNYGYCLXTSZYSTQMYGZAZCCSZZDSLZCLZRQXYYELJSBYMXSXZTEMBBLLYYLLYTDQYSHYMRQWKFKBFXNXSBYCHXBWJYHTQBPBSBWDZYLKGZSKYHXQZJXHXJXGNLJKZLYYCDXLFYFGHLJGJYBXQLYBXQPQGZTZPLNCYPXDJYQYDYMRBESJYYHKXXSTMXRCZZYWXYQYBMCLLYZHQYZWQXDBXBZWZMSLPDMYSKFMZKLZCYQYCZLQXFZZYDQZPZYGYJYZMZXDZFYFYTTQTZHGSPCZMLCCYTZXJCYTJMKSLPZHYSNZLLYTPZCTZZCKTXDHXXTQCYFKSMQCCYYAZHTJPCYLZLYJBJXTPNYLJYYNRXSYLMMNXJSMYBCSYSYLZYLXJJQYLDZLPQBFZZBLFNDXQKCZFYWHGQMRDSXYCYTXNQQJZYYPFZXDYZFPRXEJDGYQBXRCNFYYQPGHYJDYZXGRHTKYLNWDZNTSMPKLBTHBPYSZBZTJZSZZJTYYXZPHSSZZBZCZPTQFZMYFLYPYBBJQXZMXXDJMTSYSKKBJZXHJCKLPSMKYJZCXTMLJYXRZZQSLXXQPYZXMKYXXXJCLJPRMYYGADYSKQLSNDHYZKQXZYZTCGHZTLMLWZYBWSYCTBHJHJFCWZTXWYTKZLXQSHLYJZJXTMPLPYCGLTBZZTLZJCYJGDTCLKLPLLQPJMZPAPXYZLKKTKDZCZZBNZDYDYQZJYJGMCTXLTGXSZLMLHBGLKFWNWZHDXUHLFMKYSLGXDTWWFRJEJZTZHYDXYKSHWFZCQSHKTMQQHTZHYMJDJSKHXZJZBZZXYMPAGQMSTPXLSKLZYNWRTSQLSZBPSPSGZWYHTLKSSSWHZZLYYTNXJGMJSZSUFWNLSOZTXGXLSAMMLBWLDSZYLAKQCQCTMYCFJBSLXCLZZCLXXKSBZQCLHJPSQPLSXXCKSLNHPSFQQYTXYJZLQLDXZQJZDYYDJNZPTUZDSKJFSLJHYLZSQZLBTXYDGTQFDBYAZXDZHZJNHHQBYKNXJJQCZMLLJZKSPLDYCLBBLXKLELXJLBQYCXJXGCNLCQPLZLZYJTZLJGYZDZPLTQCSXFDMNYCXGBTJDCZNBGBQYQJWGKFHTNPYQZQGBKPBBYZMTJDYTBLSQMPSXTBNPDXKLEMYYCJYNZCTLDYKZZXDDXHQSHDGMZSJYCCTAYRZLPYLTLKXSLZCGGEXCLFXLKJRTLQJAQZNCMBYDKKCXGLCZJZXJHPTDJJMZQYKQSECQZDSHHADMLZFMMZBGNTJNNLGBYJBRBTMLBYJDZXLCJLPLDLPCQDHLXZLYCBLCXZZJADJLNZMMSSSMYBHBSQKBHRSXXJMXSDZNZPXLGBRHWGGFCXGMSKLLTSJYYCQLTSKYWYYHYWXBXQYWPYWYKQLSQPTNTKHQCWDQKTWPXXHCPTHTWUMSSYHBWCRWXHJMKMZNGWTMLKFGHKJYLSYYCXWHYECLQHKQHTTQKHFZLDXQWYZYYDESBPKYRZPJFYYZJCEQDZZDLATZBBFJLLCXDLMJSSXEGYGSJQXCWBXSSZPDYZCXDNYXPPZYDLYJCZPLTXLSXYZYRXCYYYDYLWWNZSAHJSYQYHGYWWAXTJZDAXYSRLTDPSSYYFNEJDXYZHLXLLLZQZSJNYQYQQXYJGHZGZCYJCHZLYCDSHWSHJZYJXCLLNXZJJYYXNFXMWFPYLCYLLABWDDHWDXJMCXZTZPMLQZHSFHZYNZTLLDYWLSLXHYMMYLMBWWKYXYADTXYLLDJPYBPWUXJMWMLLSAFDLLYFLBHHHBQQLTZJCQJLDJTFFKMMMBYTHYGDCQRDDWRQJXNBYSNWZDBYYTBJHPYBYTTJXAAHGQDQTMYSTQXKBTZPKJLZRBEQQSSMJJBDJOTGTBXPGBKTLHQXJJJCTHXQDWJLWRFWQGWSHCKRYSWGFTGYGBXSDWDWRFHWYTJJXXXJYZYSLPYYYPAYXHYDQKXSHXYXGSKQHYWFDDDPPLCJLQQEEWXKSYYKDYPLTJTHKJLTCYYHHJTTPLTZZCDLTHQKZXQYSTEEYWYYZYXXYYSTTJKLLPZMCYHQGXYHSRMBXPLLNQYDQHXSXXWGDQBSHYLLPJJJTHYJKYPPTHYYKTYEZYENMDSHLCRPQFDGFXZPSFTLJXXJBSWYYSKSFLXLPPLBBBLBSFXFYZBSJSSYLPBBFFFFSSCJDSTZSXZRYYSYFFSYZYZBJTBCTSBSDHRTJJBYTCXYJEYLXCBNEBJDSYXYKGSJZBXBYTFZWGENYHHTHZHHXFWGCSTBGXKLSXYWMTMBYXJSTZSCDYQRCYTWXZFHMYMCXLZNSDJTTTXRYCFYJSBSDYERXJLJXBBDEYNJGHXGCKGSCYMBLXJMSZNSKGXFBNBPTHFJAAFXYXFPXMYPQDTZCXZZPXRSYWZDLYBBKTYQPQJPZYPZJZNJPZJLZZFYSBTTSLMPTZRTDXQSJEHBZYLZDHLJSQMLHTXTJECXSLZZSPKTLZKQQYFSYGYWPCPQFHQHYTQXZKRSGTTSQCZLPTXCDYYZXSQZSLXLZMYCPCQBZYXHBSXLZDLTCDXTYLZJYYZPZYZLTXJSJXHLPMYTXCQRBLZSSFJZZTNJYTXMYJHLHPPLCYXQJQQKZZSCPZKSWALQSBLCCZJSXGWWWYGYKTJBBZTDKHXHKGTGPBKQYSLPXPJCKBMLLXDZSTBKLGGQKQLSBKKTFXRMDKBFTPZFRTBBRFERQGXYJPZSSTLBZTPSZQZSJDHLJQLZBPMSMMSXLQQNHKNBLRDDNXXDHDDJCYYGYLXGZLXSYGMQQGKHBPMXYXLYTQWLWGCPBMQXCYZYDRJBHTDJYHQSHTMJSBYPLWHLZFFNYPMHXXHPLTBQPFBJWQDBYGPNZTPFZJGSDDTQSHZEAWZZYLLTYYBWJKXXGHLFKXDJTMSZSQYNZGGSWQSPHTLSSKMCLZXYSZQZXNCJDQGZDLFNYKLJCJLLZLMZZNHYDSSHTHZZLZZBBHQZWWYCRZHLYQQJBEYFXXXWHSRXWQHWPSLMSSKZTTYGYQQWRSLALHMJTQJSMXQBJJZJXZYZKXBYQXBJXSHZTSFJLXMXZXFGHKZSZGGYLCLSARJYHSLLLMZXELGLXYDJYTLFBHBPNLYZFBBHPTGJKWETZHKJJXZXXGLLJLSTGSHJJYQLQZFKCGNNDJSSZFDBCTWWSEQFHQJBSAQTGYPQLBXBMMYWXGSLZHGLZGQYFLZBYFZJFRYSFMBYZHQGFWZSYFYJJPHZBYYZFFWODGRLMFTWLBZGYCQXCDJYGZYYYYTYTYDWEGAZYHXJLZYYHLRMGRXXZCLHNELJJTJTPWJYBJJBXJJTJTEEKHWSLJPLPSFYZPQQBDLQJJTYYQLYZKDKSQJYYQZLDQTGJQYZJSUCMRYQTHTEJMFCTYHYPKMHYZWJDQFHYYXWSHCTXRLJHQXHCCYYYJLTKTTYTMXGTCJTZAYYOCZLYLBSZYWJYTSJYHBYSHFJLYGJXXTMZYYLTXXYPZLXYJZYZYYPNHMYMDYYLBLHLSYYQQLLNJJYMSOYQBZGDLYXYLCQYXTSZEGXHZGLHWBLJHEYXTWQMAKBPQCGYSHHEGQCMWYYWLJYJHYYZLLJJYLHZYHMGSLJLJXCJJYCLYCJPCPZJZJMMYLCQLNQLJQJSXYJMLSZLJQLYCMMHCFMMFPQQMFYLQMCFFQMMMMHMZNFHHJGTTHHKHSLNCHHYQDXTMMQDCYZYXYQMYQYLTDCYYYZAZZCYMZYDLZFFFMMYCQZWZZMABTBYZTDMNZZGGDFTYPCGQYTTSSFFWFDTZQSSYSTWXJHXYTSXXYLBYQHWWKXHZXWZNNZZJZJJQJCCCHYYXBZXZCYZTLLCQXYNJYCYYCYNZZQYYYEWYCZDCJYCCHYJLBTZYYCQWMPWPYMLGKDLDLGKQQBGYCHJXY " ;

    
/**
     * 将一字符串转换成拼音首字母
     * 
     * 
@since  1.1
     * 
@param  strText
     *            字符串
     * 
@return  字符串对应的拼音首字母
     
*/
    
public   static  String getFirstPY(String strText) {
        
if  (strText  ==   null   ||  strText.trim().length()  ==   0 )
            
return   "" ;
        String ret 
=   "" ;
        
for  ( int  i  =   0 ; i  <  strText.length(); i ++ ) {
            
char  ch  =  strText.charAt(i);
            
if  ( ' \u4E00 '   <=  ch  &&   ' \u9FA5 '   >=  ch)
                ret 
=  ret  +  strChineseFirstPY.charAt(ch  -   19968 );
            
else
                ret 
=  ret  +  ch;
        }

        
return  ret;
    }

    
/**
     * 替换字符串
     * 
     * 
@since  1.1
     * 
@param  strSc
     *            需要进行替换的字符串
     * 
@param  oldStr
     *            源字符串
     * 
@param  newStr
     *            替换后的字符串
     * 
@return  替换后对应的字符串
     
*/
    
public   static  String replace(String strSc, String oldStr, String newStr) {
        String ret 
=  strSc;
        
if  (ret  !=   null   &&  oldStr  !=   null   &&  newStr  !=   null ) {
            ret 
=  strSc.replaceAll(oldStr, newStr);
        }
        
return  ret;
    }

    
/**
     * 替换字符串,修复java.lang.String类的replaceAll方法时第一参数是字符串常量正则时(如:"address".
     * replaceAll("dd","$");)的抛出异常:java.lang.StringIndexOutOfBoundsException:
     * String index out of range: 1的问题。
     * 
     * 
@since  1.2
     * 
@param  strSc
     *            需要进行替换的字符串
     * 
@param  oldStr
     *            源字符串
     * 
@param  newStr
     *            替换后的字符串
     * 
@return  替换后对应的字符串
     
*/
    
public   static  String replaceAll(String strSc, String oldStr, String newStr) {
        
int  i  =   - 1 ;
        
while  ((i  =  strSc.indexOf(oldStr))  !=   - 1 ) {
            strSc 
=   new  StringBuffer(strSc.substring( 0 , i)).append(newStr)
                    .append(strSc.substring(i 
+  oldStr.length())).toString();
        }
        
return  strSc;
    }

    
/**
     * 将字符串转换成HTML格式的字符串
     * 
     * 
@since  1.1
     * 
@param  str
     *            需要进行转换的字符串
     * 
@return  转换后的字符串
     
*/
    
public   static  String toHtml(String str) {
        String html 
=  str;
        
if  (str  ==   null   ||  str.length()  ==   0 ) {
            
return   "" ;
        } 
else  {
            html 
=  replace(html,  " & " " & " );
            html 
=  replace(html,  " < " " < " );
            html 
=  replace(html,  " > " " > " );
            html 
=  replace(html,  " \r\n " " \n " );
            html 
=  replace(html,  " \n " " <br>\n " );
            html 
=  replace(html,  " \ "" """ );
            html 
=  replace(html,  "   " "   " );
            
return  html;
        }
    }

    
/**
     * 将HTML格式的字符串转换成常规显示的字符串
     * 
     * 
@since  1.1
     * 
@param  str
     *            需要进行转换的字符串
     * 
@return  转换后的字符串
     
*/
    
public   static  String toText(String str) {
        String text 
=  str;
        
if  (str  ==   null   ||  str.length()  ==   0 ) {
            
return   "" ;
        } 
else  {
            text 
=  replace(text,  " & " " & " );
            text 
=  replace(text,  " < " " < " );
            text 
=  replace(text,  " > " " > " );
            text 
=  replace(text,  " <br>\n " " \n " );
            text 
=  replace(text,  " <br> " " \n " );
            text 
=  replace(text,  """ " \ "" );
            text 
=  replace(text,  "   " "   " );
            
return  text;
        }
    }

    
/**
     * 将一字符串数组以某特定的字符串作为分隔来变成字符串
     * 
     * 
@since  1.0
     * 
@param  strs
     *            字符串数组
     * 
@param  token
     *            分隔字符串
     * 
@return  以token为分隔的字符串
     
*/
    
public   static  String join(String[] strs, String token) {
        
if  (strs  ==   null )
            
return   null ;
        StringBuffer sb 
=   new  StringBuffer();
        
for  ( int  i  =   0 ; i  <  strs.length; i ++ ) {
            
if  (i  !=   0 )
                sb.append(token);
            sb.append(strs[i]);
        }
        
return  sb.toString();
    }

    
/**
     * 将一字符串以某特定的字符串作为分隔来变成字符串数组
     * 
     * 
@since  1.0
     * 
@param  str
     *            需要拆分的字符串("@12@34@56")
     * 
@param  token
     *            分隔字符串("@")
     * 
@return  以token为分隔的拆分开的字符串数组
     
*/
    
public   static  String[] split(String str, String token) {
        String temp 
=  str.substring( 1 , str.length());
        
return  temp.split(token);
    }

    
/**
     * 验证字符串合法性
     * 
     * 
@since  1.0
     * 
@param  str
     *            需要验证的字符串
     * 
@param  test
     *            非法字符串(如:"~!#$%^&*()',;:?")
     * 
@return  true:非法;false:合法
     
*/
    
public   static   boolean  check(String str, String test) {
        
if  (str  ==   null   ||  str.equals( "" ))
            
return   true ;
        
boolean  flag  =   false ;
        
for  ( int  i  =   0 ; i  <  test.length(); i ++ ) {
            
if  (str.indexOf(test.charAt(i))  !=   - 1 ) {
                flag 
=   true ;
                
break ;
            }
        }
        
return  flag;
    }

    
/**
     * 将数值型字符串转换成Integer型
     * 
     * 
@since  1.0
     * 
@param  str
     *            需要转换的字符型字符串
     * 
@param  ret
     *            转换失败时返回的值
     * 
@return  成功则返回转换后的Integer型值;失败则返回ret
     
*/
    
public   static  Integer String2Integer(String str, Integer ret) {
        
try  {
            
return  Integer.parseInt(str);
        } 
catch  (NumberFormatException e) {
            
return  ret;
        }
    }

    
/**
     * 将数值型转换成字符串
     * 
     * 
@since  1.0
     * 
@param  it
     *            需要转换的Integer型值
     * 
@param  ret
     *            转换失败的返回值
     * 
@return  成功则返回转换后的字符串;失败则返回ret
     
*/
    
public   static  String Integer2String(Integer it, String ret) {
        
try  {
            
return  Integer.toString(it);
        } 
catch  (NumberFormatException e) {
            
return  ret;
        }
    }

    
/**
     * 比较两字符串大小(ASCII码顺序)
     * 
     * 
@since  1.1
     * 
@param  str1
     *            参与比较的字符串1
     * 
@param  str2
     *            参与比较的字符串2
     * 
@return  str1>str2:1;str1<str2:-1;str1=str2:0
     
*/
    
public   static   int  compare(String str1, String str2) { //
         if  (str1.equals(str2)) {
            
return   0 ;
        }
        
int  str1Length  =  str1.length();
        
int  str2Length  =  str2.length();
        
int  length  =   0 ;
        
if  (str1Length  >  str2Length) {
            length 
=  str2Length;
        } 
else  {
            length 
=  str1Length;
        }
        
for  ( int  i  =   0 ; i  <  length; i ++ ) {
            
if  (str1.charAt(i)  >  str2.charAt(i)) {
                
return   1 ;
            }
        }
        
return   - 1 ;
    }

    
/**
     * 将阿拉伯数字的钱数转换成中文方式
     * 
     * 
@since  1.1
     * 
@param  num
     *            需要转换的钱的阿拉伯数字形式
     * 
@return  转换后的中文形式
     
*/
    
public   static  String num2Chinese( double  num) {
        String result 
=   "" ;
        String str 
=  Double.toString(num);
        
if  (str.contains( " . " )) {
            String begin 
=  str.substring( 0 , str.indexOf( " . " ));
            String end 
=  str.substring(str.indexOf( " . " +   1 , str.length());
            
byte [] b  =  begin.getBytes();
            
int  j  =  b.length;
            
for  ( int  i  =   0 , k  =  j; i  <  j; i ++ , k -- ) {
                result 
+=  getConvert(begin.charAt(i));
                
if  ( ! " " .equals(result.charAt(result.length()  -   1 +   "" )) {
                    result 
+=  getWei(k);
                }
                System.out.println(result);

            }
            
for  ( int  i  =   0 ; i  <  result.length(); i ++ ) {
                result 
=  result.replaceAll( " 零零 " " " );
            }
            
if  ( " " .equals(result.charAt(result.length()  -   1 +   "" )) {
                result 
=  result.substring( 0 , result.length()  -   1 );
            }
            result 
+=   " " ;
            
byte [] bb  =  end.getBytes();
            
int  jj  =  bb.length;
            
for  ( int  i  =   0 , k  =  jj; i  <  jj; i ++ , k -- ) {
                result 
+=  getConvert(end.charAt(i));
                
if  (bb.length  ==   1 ) {
                    result 
+=   " " ;
                } 
else   if  (bb.length  ==   2 ) {
                    result 
+=  getFloat(k);
                }
            }
        } 
else  {
            
byte [] b  =  str.getBytes();
            
int  j  =  b.length;
            
for  ( int  i  =   0 , k  =  j; i  <  j; i ++ , k -- ) {
                result 
+=  getConvert(str.charAt(i));
                result 
+=  getWei(k);
            }
        }
        
return  result;
    }

    
private   static  String getConvert( char  num) {
        
if  (num  ==   ' 0 ' ) {
            
return   " " ;
        } 
else   if  (num  ==   ' 1 ' ) {
            
return   " " ;
        } 
else   if  (num  ==   ' 2 ' ) {
            
return   " " ;
        } 
else   if  (num  ==   ' 3 ' ) {
            
return   " " ;
        } 
else   if  (num  ==   ' 4 ' ) {
            
return   " " ;
        } 
else   if  (num  ==   ' 5 ' ) {
            
return   " " ;
        } 
else   if  (num  ==   ' 6 ' ) {
            
return   " " ;
        } 
else   if  (num  ==   ' 7 ' ) {
            
return   " " ;
        } 
else   if  (num  ==   ' 8 ' ) {
            
return   " " ;
        } 
else   if  (num  ==   ' 9 ' ) {
            
return   " " ;
        } 
else  {
            
return   "" ;
        }
    }

    
private   static  String getFloat( int  num) {
        
if  (num  ==   2 ) {
            
return   " " ;
        } 
else   if  (num  ==   1 ) {
            
return   " " ;
        } 
else  {
            
return   "" ;
        }
    }

    
private   static  String getWei( int  num) {
        
if  (num  ==   1 ) {
            
return   "" ;
        } 
else   if  (num  ==   2 ) {
            
return   " " ;
        } 
else   if  (num  ==   3 ) {
            
return   " " ;
        } 
else   if  (num  ==   4 ) {
            
return   " " ;
        } 
else   if  (num  ==   5 ) {
            
return   " " ;
        } 
else   if  (num  ==   6 ) {
            
return   " " ;
        } 
else   if  (num  ==   7 ) {
            
return   " " ;
        } 
else   if  (num  ==   8 ) {
            
return   " " ;
        } 
else   if  (num  ==   9 ) {
            
return   " 亿 " ;
        } 
else   if  (num  ==   10 ) {
            
return   " " ;
        } 
else   if  (num  ==   11 ) {
            
return   " " ;
        } 
else   if  (num  ==   12 ) {
            
return   " " ;
        } 
else   if  (num  ==   13 ) {
            
return   " " ;
        } 
else  {
            
return   "" ;
        }
    }
    
/**
     * 将字符串的首字母改为大写
     * 
     * 
@since  1.2
     * 
@param  str
     *            需要改写的字符串
     * 
@return  改写后的字符串
     
*/
    
public   static  String firstToUpper(String str){
        
return  str.substring( 0 , 1 ).toUpperCase() + str.substring( 1 );
    }
}

 

 

转载于:https://www.cnblogs.com/zhangqifeng/archive/2010/01/11/1643819.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值