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();
            }
        }
    }


posted @ 2009-10-09 23:01  angushine  阅读(271)  评论(0编辑  收藏  举报