JAVA常用函数2

ISBN(国际标准书号)的校验 
public   class  Test {

    
public   static   void  main(String[] args) {
        System.out.println(
" 9787302155638  "   +  ISBN.checkISBN( " 9787302155638 " ));
        System.out.println(
" 7564105607  "   +  ISBN.checkISBN( " 7564105607 " ));
        System.out.println(
" 730213880X  "   +  ISBN.checkISBN( " 730213880X " ));
        System.out.println(
" 7302138800  "   +  ISBN.checkISBN( " 7302138800 " ));
        System.out.println(
" 9790000000000  "   +  ISBN.checkISBN( " 9790000000000 " ));
        
try  {
            System.out.println(ISBN.checkISBN(
" 9770000000000 " ));
        }
catch (Exception e) {
            System.out.println(
" 9770000000000  "   +  e.getMessage());
        }
        
try  {
            System.out.println(ISBN.checkISBN(
" 123456545 " ));
        }
catch (Exception e) {
            System.out.println(
" 123456545  "   +  e.getMessage());
        }        
    }
}

public   final   class  ISBN {

    
/**
     * 根据输入的ISBN号,检验ISBN的有效性。依据 GB/T 5795-2006 和 ISO 2108:2005 ISBN
     * 10位标准和13位标准实现(13位标准自2007年1月1日开始实行,在此之前采用10位标准)。
      * 
     * 
@param  String isbn:需要进行校验的ISBN字符串
      * 
@return  true:所输入的ISBN校验正确;<br/> false:所输入的ISBN校验错误
      
*/
    
public   static   boolean  checkISBN(String isbn) {

        
int  count  =   0 ;
        
int  checkBitInt  =   0 ;

        
//  将ISBN数据全取大写字母
         
// isbn = isbn.toUpperCase();
        
        
char [] cs  =  isbn.toCharArray();        
        
switch  (isbn.length()) {
        
case   10 :
            
//  ****************************************************************
            
//  当ISBN为10位时,进行的校验,用于2007年1月1日前的出版物
              
//  数据格式:从左至右前9位为ISBN数据,第10位为校验位
              
//  校验方法:
              
//  (1) 从左至右将前9位数据从10开始至2进行编号,作为位权
              
//  (2) 将9位数据与各位位权进行加权,并求其9位和(称为加权和,记作M)
              
//  (3) 第10位校验位计算方法,校验位为C:
              
//          M + C ≡ 0 (mod 11)
            
//   C为10时,记作“X”
              
//  ****************************************************************

            
//  取出前9位数字进行加权和计算            
               for  ( int  i  =   0 ; i  <   9 ; i ++ ) {
                
//  若前9位数据中有非数字字符,则抛出异常
                   if  (cs[i]  <   ' 0 '   ||  cs[i]  >   ' 9 ' ) {
                    
throw   new  ISBNFormatException( " ISBN  "   +  isbn  +
                            
"  第  "   +  (i  +   1 +   "  位中出现非法字符  "   +  cs[i]);
                }
                
                
int  c  =  cs[i]  -   ' 0 ' ;
                
//  求加权和
                  count  +=  c  *  ( 10   -  i);
            }

            
//  取出校验位数据0~9和X符合校验字符要求
               if  (cs[ 9 >=   ' 0 '   &&  cs[ 9 <=   ' 9 ' ) {
                checkBitInt 
=  cs[ 9 -   ' 0 ' ;
            } 
else   if  (cs[ 9 ==   ' X '   ||  cs[ 9 ==   ' x ' ) {
                
//  校验位中的“X”表示数据“10”
                  checkBitInt  =   10 ;
            } 
else  {
                
//  非0~9或X时抛出异常
                   throw   new  ISBNFormatException( " ISBN  "   +  isbn  +  
                        
"  第 10 位中出现非法字符  "   +  cs[ 9 ]);
            }

            
//  进行校验
               if  ((count  +  checkBitInt)  %   11   ==   0 ) {
                
return   true //  校验成功
              }  else  {
                
return   false //  校验失败
            }
        
case   13 :
            
//  ****************************************************************
            
//  当ISBN为13位时,进行的校验,用于2007年1月1日后的出版物
              
//  数据格式:从左至右前12位为ISBN数据,第13位为校验位
              
//  校验方法:
              
//  (1) 从左至右将前12位数的取其奇位数和和偶位数和
              
//  (2) 将偶位数和乘3,并其与奇位数和的和,得加权和
              
//  (3) 第13位校验位计算方法,校验位为C:
              
//          M + C ≡ 0 (mod 10)
            
//  ****************************************************************

            
//  ISBN为13位数据时,前3位目前只能是“978”(已实行)或“979”(暂未实行)
               if  ( ! isbn.startsWith( " 978 " &&   ! isbn.startsWith( " 979 " )) {
                
throw   new  ISBNFormatException( " ISBN-13 格式不符合标准 " );
            }
            
//  取出前12位数字进行加权和计算
               int  countEven  =   0 ;
            
int  countOdd  =   0 ;
            
for  ( int  i  =   0 ; i  <   12 ; i ++ ) {
                
int  c  =  cs[i]  -   ' 0 ' ;
                
//  若前12位数据中有非数字字符,则抛出异常
                   if  (c  <   0   ||  c  >   9 ) {
                    
throw   new  ISBNFormatException( " ISBN  "   +  isbn  +
                            
"  第  "   +  (i  +   1 +   "  位中出现非法字符  "   +  cs[i]);
                }
                
//  分别计算奇位数和偶位数的和
                   if  ((i  &   0x1 ==   0 ) {
                    countOdd 
+=  c;
                } 
else  {
                    countEven 
+=  c;
                }
            }
            
//  求加权和
             count  =  countOdd  +  (countEven  *   3 );

            
//  取出校验位数据            
              if  (cs[ 12 <   ' 0 '   ||  cs[ 12 >   ' 9 ' ) {
                
//  校验位为非0~9字符时,抛出异常
                   throw   new  ISBNFormatException( " ISBN  "   +  isbn
                        
+   "  第 13 位中出现非法字符  "   +  cs[ 12 ]);
            }

            checkBitInt 
=  cs[ 12 -   ' 0 ' ;
            
//  进行校验
              if  ((count  +  checkBitInt)  %   10   ==   0 ) {
                
return   true //  校验成功
             }  else  {
                
return   false //  校验失败
             }
        
default :
            
//  ISBN为非10位或13位时抛出异常
              throw   new  ISBNFormatException( " ISBN 格式不符合标准 " );
        }
    }
}

public   class  ISBNFormatException  extends  RuntimeException {

    
private   static   final   long  serialVersionUID  =   1L ;

    
public  ISBNFormatException() {
        
super ( " ISBN Error  " );
    }

    
public  ISBNFormatException(String arg0) {
        
super (arg0);
    }
}



生成 JSON 字符串的工具 
import  java.util.ArrayList;
import  java.util.Iterator;
import  java.util.LinkedHashMap;
import  java.util.List;
import  java.util.Map;

/**
 * JSON utility class
 *
 * 
@since  2008-04-21
 
*/
public   class  Json {

    
//  test
     public   static   void  main(String[] args) {
        Json json1 
=   new  Json();
        json1.add(
" totalCount " 2 );
        json1.add(
" isTest " true );
        
        Json json_a 
=   new  Json();
        json_a.add(
" menuid " 1 );
        json_a.add(
" menuname " " testmenu " );
        json1.add(
" topics " , json_a);
        
        Json json_b 
=   new  Json();
        json_b.add(
" menuid " 2 );
        json_b.add(
" menuname " " testmenu " );
        json1.add(
" topics " , json_b);
        System.out.println(json1.toString());
    }

    
private  Map map  =   new  LinkedHashMap();

    
/**
     * 添加一个 JSON 属性,值为一个字符串,重复添加时产生数组<p/>
     * 
     * add("name", "value");<br/>
     * 添加一个字符串,产生的 JSON 如:{"name":"value"}<p/>
     * 
     * add("name", "value1");<br/>
     * add("name", "value2");<br/>
     * 添加两个同属性的字符串,产生的 JSON 如:{"name":["value1", "value2"]}<p/>
     * 
     * 
@param  key       JSON 属性名
      * 
@param  str       字符串格式的属性值
      
*/
    
public   void  add(String key, String value) {
        addElement(key, value);
    }
    
    
public   void  add(String key,  int  num) {
        addElement(key, 
new  Integer(num));
    }
    
    
public   void  add(String key,  boolean  b) {
        addElement(key, 
new  Boolean(b));
    }

    
/**
     * 添加一个 JSON 属性,值为一个 JSON,重复添加时产生 JSON 数组<p/>
     * 
     * Json json1 = new Json();<br/>
     * json1.add("name1", "value1");<br/>
     * json1.add("name2", "value2");<br/>
     * Json json = new Json();<br/>
     * json.add("message", json1);<br/>
     * 添加一个 JSON,产生的 JSON 如:{"message":{"name1":"value1", "name2":"value2"}}<p/>
     * 
     * Json json1 = new Json();<br/>
     * json1.add("name1", "value1");<br/>
     * json1.add("name2", "value2");<br/>
     * Json json2 = new Json();<br/>
     * json2.add("name1", "value3");<br/>
     * json2.add("name2", "value4");<br/>
     * Json json = new Json();<br/>
     * json.add("message", json1);<br/>
     * json.add("message", json2);<br/>
     * 添加两个同属性的 JSON,产生的 JSON 如:{"message":[{"name1":"value1", "name2":"value2"}, {"name1":"value3", "name2":"value4"}]}<p/>
     * 
     * 
@param  key       JSON 属性名
      * 
@param  json      JSON 格式的属性值
      
*/
    
public   void  add(String key, Json json) {
        addElement(key, json);
    }

    
public  String toString() {
        StringBuilder sb 
=   new  StringBuilder();
        sb.append(
" { " );
        
int  k  =   0 ;
        
for  (Iterator i  =  map.keySet().iterator(); i.hasNext();) {
            String key 
=  (String)(i.next());
            Object obj 
=  map.get(key);
            
if  (k  >   0 ) {
                sb.append(
" , " );
            }
            appendKey(sb, key);
            
if  (obj  instanceof  String) {
                appendString(sb, (String)obj);
            } 
else   if  (obj  instanceof  List) {
                appendList(sb, (List)obj);
            } 
else   if  (obj  instanceof  Json) {
                appendJson(sb, (Json)obj);
            } 
else  {
                appendOther(sb, obj);
            }
            k
++ ;
        }
        sb.append(
" } " );
        
return  sb.toString();
    }

    
private   void  addElement(String key, Object obj) {
        
if  ( ! map.containsKey(key)) {
            
if (obj  instanceof  Json) {
                List list 
=   new  ArrayList();
                list.add(obj);
                map.put(key, list);
            } 
else  {
                map.put(key, obj);
            }
            
return ;
        }

        Object o 
=  map.remove(key);

        
if  (o  instanceof  List) {
            ((List)o).add(obj);
            map.put(key, o);
            
return ;
        }

        
//  o is a String
        List list  =   new  ArrayList();
        list.add(o);
        list.add(obj);
        map.put(key, list);
    }

    
/**
     * Append JSON property name
     * 
     * 
@param  sb
     * 
@param  key
     
*/
    
private   void  appendKey(StringBuilder sb, String key) {
        sb.append(
" \ "" ).append(key).append( " \ " : " );
    }

    
/**
     * Append JSON property value that is a String
     * 
     * 
@param  sb
     * 
@param  str
     
*/
    
private   void  appendString(StringBuilder sb, String str) {
        sb.append(
" \ "" ).append(str).append( " \ "" );
    }
    
    
/**
     * Append JSON property value that is a Integer
     * 
     * 
@param  sb
     * 
@param  num
     
*/
    
private   void  appendOther(StringBuilder sb, Object obj) {
        sb.append(obj);
    }

    
/**
     * Append JSON property value that is a List
     * 
     * 
@param  sb
     * 
@param  list
     
*/
    
private   void  appendList(StringBuilder sb, List list) {
        sb.append(
" [ " );
        
for  ( int  j  =   0 , m  =  list.size(); j  <  m; j ++ ) {
            
if  (j  >   0 ) {
                sb.append(
" , " );
            }
            Object obj 
=  list.get(j);
            
if  (obj  instanceof  String) {
                appendString(sb, (String)obj);
            } 
else   if  (obj  instanceof  Json) {
                appendJson(sb, (Json)obj);
            } 
else  {
                appendOther(sb, obj);
            }
        }
        sb.append(
" ] " );
    }

    
/**
     * Append JSON property value that is a JSON
     * 
     * 
@param  sb
     * 
@param  json
     
*/
    
private   void  appendJson(StringBuilder sb, Json json) {
        sb.append(json.toString());
    }
}

  
/**
  * 从指定的字符串中提取Email
  * content 指定的字符串
  
*/
 
public   static  String parse(String content) {
  String email 
=   null ;
  
if  (content == null   ||  content.length() < 1 ) {
   
return  email;
  }
  
// 找出含有@
   int  beginPos;
  
int  i;
  String token 
=   " @ " ;
  String preHalf
= "" ;
  String sufHalf 
=   "" ;
  
  beginPos 
=  content.indexOf(token);
  
if  (beginPos >- 1 ) {
   
// 前项扫描
   String s  =   null ;
   i
=  beginPos;
   
while (i > 0 ) {
    s 
=  content.substring(i - 1 ,i);
    
if  (isLetter(s))
     preHalf 
=  s + preHalf;
    
else
     
break ;
    i
-- ;
   }
   
// 后项扫描
   i =  beginPos + 1 ;
   
while ( i < content.length()) {
    s 
=  content.substring(i,i + 1 );
    
if  (isLetter(s))
     sufHalf 
=   sufHalf  + s;
    
else
     
break ;
    i
++ ;  
   }
   
// 判断合法性
   email  =  preHalf  +   " @ "   +  sufHalf;
   
if  (isEmail(email)) {
    
return  email;
   }
  }
  
return   null ;
 }
 
 
/**
  * 判断是不是合法Email
  * email Email地址
  
*/
 
public   static   boolean  isEmail(String email) {
  
try  {
   
if  (email == null   ||  email.length() < 1   ||  email.length() > 256 ) {
    
return   false ;
   }
   
   String check 
=   " ^([0-9a-zA-Z]+[_.0-9a-zA-Z-]+)@([a-zA-Z0-9-]+[.])+([a-zA-Z]{2,3})$ " ;
   Pattern regex 
=  Pattern.compile(check);
   Matcher matcher 
=  regex.matcher(email);
   
boolean  isMatched  =  matcher.matches();
   
if (isMatched) {
    
return   true ;
   } 
else  {
    
return   false ;
   }
  } 
catch  (RuntimeException e) {
   
return   false ;
  } 
 }
 
 
/**
  * 判断是不是合法字符
  * c 要判断的字符
  
*/
 
public   static   boolean  isLetter(String c) {
  
boolean  result  =   false ;
  
  
if  (c == null   ||  c.length() < 0 ) {
   
return   false ;
  }
  
// a-z 
   if  (c.compareToIgnoreCase( " a " ) >= 0   &&  c.compareToIgnoreCase( " z " ) <= 0 ) {
   
return   true ;
  }
  
// 0-9
   if  (c.compareToIgnoreCase( " 0 " ) >= 0   &&  c.compareToIgnoreCase( " 9 " ) <= 0 ) {
   
return   true ;
  }
  
// . - _
   if  (c.equals( " . " ||  c.equals( " - " ||  c.equals( " _ " ) ) {
   
return   true ;
  }
  
return  result; 
 }

    
/**
     * 列出某文件夹及其子文件夹下面的文件,并可根据扩展名过滤
     * 
     * 
@param  path
     
*/
    
public   static   void  list(File path)
    {
        
if  ( ! path.exists())
        {
            System.out.println(
" 文件名称不存在! " );
        }
        
else
        {
            
if  (path.isFile())
            {
                
if  (path.getName().toLowerCase().endsWith( " .pdf " )
                        
||  path.getName().toLowerCase().endsWith( " .doc " )
                        
||  path.getName().toLowerCase().endsWith( " .html " )
                        
||  path.getName().toLowerCase().endsWith( " .htm " ))
                {
                    System.out.println(path);
                    System.out.println(path.getName());
                }
            }
            
else
            {
                File[] files 
=  path.listFiles();
                
for  ( int  i  =   0 ; i  <  files.length; i ++ )
                {
                    list(files[i]);
                }
            }
        }
    }



import  java.text.SimpleDateFormat;
import  java.util.Calendar;

public   class  DateUtil
{

    
/**
     * 格式化日期
     * 
     * 
@param  dateStr
     *            字符型日期
     * 
@param  format
     *            格式
     * 
@return  返回日期
     
*/
    
public   static  java.util.Date parseDate(String dateStr, String format)
    {
        java.util.Date date 
=   null ;
        
try
        {
            java.text.DateFormat df 
=   new  java.text.SimpleDateFormat(format);
            String dt 
=  dateStr.replaceAll( " - " " / " );
            
if  (( ! dt.equals( "" ))  &&  (dt.length()  <  format.length()))
            {
                dt 
+=  format.substring(dt.length()).replaceAll( " [YyMmDdHhSs] " " 0 " );
            }
            date 
=  (java.util.Date) df.parse(dt);
        }
        
catch  (Exception e)
        {
        }
        
return  date;
    }

    
/**
     * 
@param  dateStr
     * 
@return  Date
     
*/
    
public   static  java.util.Date parseDate(String dateStr)
    {
        
return  parseDate(dateStr,  " yyyy/MM/dd " );
    }

    
/**
     * 格式化输出日期
     * 
     * 
@param  date
     *            日期
     * 
@param  format
     *            格式
     * 
@return  返回字符型日期
     
*/
    
public   static  String format(java.util.Date date, String format)
    {
        String result 
=   "" ;
        
try
        {
            
if  (date  !=   null )
            {
                java.text.DateFormat df 
=   new  java.text.SimpleDateFormat(format);
                result 
=  df.format(date);
            }
        }
        
catch  (Exception e)
        {
        }
        
return  result;
    }

    
public   static  String format(java.util.Date date)
    {
        
return  format(date,  " yyyy/MM/dd " );
    }

    
/**
     * 返回年份
     * 
     * 
@param  date
     *            日期
     * 
@return  返回年份
     
*/
    
public   static   int  getYear(java.util.Date date)
    {
        java.util.Calendar c 
=  java.util.Calendar.getInstance();
        c.setTime(date);
        
return  c.get(java.util.Calendar.YEAR);
    }

    
/**
     * 返回月份
     * 
     * 
@param  date
     *            日期
     * 
@return  返回月份
     
*/
    
public   static   int  getMonth(java.util.Date date)
    {
        java.util.Calendar c 
=  java.util.Calendar.getInstance();
        c.setTime(date);
        
return  c.get(java.util.Calendar.MONTH)  +   1 ;
    }

    
/**
     * 返回日份
     * 
     * 
@param  date
     *            日期
     * 
@return  返回日份
     
*/
    
public   static   int  getDay(java.util.Date date)
    {
        java.util.Calendar c 
=  java.util.Calendar.getInstance();
        c.setTime(date);
        
return  c.get(java.util.Calendar.DAY_OF_MONTH);
    }

    
/**
     * 返回小时
     * 
     * 
@param  date
     *            日期
     * 
@return  返回小时
     
*/
    
public   static   int  getHour(java.util.Date date)
    {
        java.util.Calendar c 
=  java.util.Calendar.getInstance();
        c.setTime(date);
        
return  c.get(java.util.Calendar.HOUR_OF_DAY);
    }

    
/**
     * 返回分钟
     * 
     * 
@param  date
     *            日期
     * 
@return  返回分钟
     
*/
    
public   static   int  getMinute(java.util.Date date)
    {
        java.util.Calendar c 
=  java.util.Calendar.getInstance();
        c.setTime(date);
        
return  c.get(java.util.Calendar.MINUTE);
    }

    
/**
     * 返回秒钟
     * 
     * 
@param  date
     *            日期
     * 
@return  返回秒钟
     
*/
    
public   static   int  getSecond(java.util.Date date)
    {
        java.util.Calendar c 
=  java.util.Calendar.getInstance();
        c.setTime(date);
        
return  c.get(java.util.Calendar.SECOND);
    }

    
/**
     * 返回毫秒
     * 
     * 
@param  date
     *            日期
     * 
@return  返回毫秒
     
*/
    
public   static   long  getMillis(java.util.Date date)
    {
        java.util.Calendar c 
=  java.util.Calendar.getInstance();
        c.setTime(date);
        
return  c.getTimeInMillis();
    }

    
/**
     * 返回字符型日期
     * 
     * 
@param  date
     *            日期
     * 
@return  返回字符型日期
     
*/
    
public   static  String getDate(java.util.Date date)
    {
        
return  format(date,  " yyyy/MM/dd " );
    }

    
/**
     * 返回字符型时间
     * 
     * 
@param  date
     *            日期
     * 
@return  返回字符型时间
     
*/
    
public   static  String getTime(java.util.Date date)
    {
        
return  format(date,  " HH:mm:ss " );
    }

    
/**
     * 返回字符型日期时间
     * 
     * 
@param  date
     *            日期
     * 
@return  返回字符型日期时间
     
*/
    
public   static  String getDateTime(java.util.Date date)
    {
        
return  format(date,  " yyyy/MM/dd HH:mm:ss " );
    }

    
/**
     * 日期相加
     * 
     * 
@param  date
     *            日期
     * 
@param  day
     *            天数
     * 
@return  返回相加后的日期
     
*/
    
public   static  java.util.Date addDate(java.util.Date date,  int  day)
    {
        java.util.Calendar c 
=  java.util.Calendar.getInstance();
        c.setTimeInMillis(getMillis(date) 
+  (( long ) day)  *   24   *   3600   *   1000 );
        
return  c.getTime();
    }

    
/**
     * 日期相减
     * 
     * 
@param  date
     *            日期
     * 
@param  date1
     *            日期
     * 
@return  返回相减后的日期
     
*/
    
public   static   int  diffDate(java.util.Date date, java.util.Date date1)
    {
        
return  ( int ) ((getMillis(date)  -  getMillis(date1))  /  ( 24   *   3600   *   1000 ));
    }

    
/**
     * 取得指定月份的第一天
     * 
     * 
@param  strdate
     *            String
     * 
@return  String
     
*/
    
public   static  String getMonthBegin(String strdate)
    {
        java.util.Date date 
=  parseDate(strdate);
        
return  format(date,  " yyyy-MM " +   " -01 " ;
    }

    
/**
     * 取得指定月份的最后一天
     * 
     * 
@param  strdate
     *            String
     * 
@return  String
     
*/
    
public   static  String getMonthEnd(String strdate)
    {
        java.util.Date date 
=  parseDate(getMonthBegin(strdate));
        Calendar calendar 
=  Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, 
1 );
        calendar.add(Calendar.DAY_OF_YEAR, 
- 1 );
        
return  formatDate(calendar.getTime());
    }

    
/**
     * 常用的格式化日期
     * 
     * 
@param  date
     *            Date
     * 
@return  String
     
*/
    
public   static  String formatDate(java.util.Date date)
    {
        
return  formatDateByFormat(date,  " yyyy-MM-dd " );
    }

    
/**
     * 以指定的格式来格式化日期
     * 
     * 
@param  date
     *            Date
     * 
@param  format
     *            String
     * 
@return  String
     
*/
    
public   static  String formatDateByFormat(java.util.Date date, String format)
    {
        String result 
=   "" ;
        
if  (date  !=   null )
        {
            
try
            {
                SimpleDateFormat sdf 
=   new  SimpleDateFormat(format);
                result 
=  sdf.format(date);
            }
            
catch  (Exception ex)
            {
                ex.printStackTrace();
            }
        }
        
return  result;
    }

}




    
/**
     * 拷贝一个目录或者文件到指定路径下
     * 
     * 
@param  source
     * 
@param  target
     
*/
    
public   static   void  copy(File source, File target)
    {
        File tarpath 
=   new  File(target, source.getName());
        
if  (source.isDirectory())
        {
            tarpath.mkdir();
            File[] dir 
=  source.listFiles();
            
for  ( int  i  =   0 ; i  <  dir.length; i ++ )
            {
                copy(dir[i], tarpath);
            }
        }
        
else
        {
            
try
            {
                InputStream is 
=   new  FileInputStream(source);
                OutputStream os 
=   new  FileOutputStream(tarpath);
                
byte [] buf  =   new   byte [ 1024 ];
                
int  len  =   0 ;
                
while  ((len  =  is.read(buf))  !=   - 1 )
                {
                    os.write(buf, 
0 , len);
                }
                is.close();
                os.close();
            }
            
catch  (FileNotFoundException e)
            {
                e.printStackTrace();
            }
            
catch  (IOException e)
            {
                e.printStackTrace();
            }
        }
    }


你可能感兴趣的:(java)