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