//////////////////////////////////////////////////////////////////////
//
// MiscUtil.java: implementation of the MiscUtil class.
//
///////////////////////////////////////////////////////////////////////////////
package com.yuzhi.fine.utils;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Random;
import java.util.TimeZone;
import java.util.Vector;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MiscUtil {
/**
* 分割字符串,原理:检测字符串中的分割字符串,然后取子串
*
* @param original
* 需要分割的字符串
* @param regex
* 分割字符串
* @return 分割后生成的字符串数组
*/
public static String[] StringSplit(String original, String regex) {
if (original == null || regex == null) {
return null;
}
// 取子串的起始位置
int startIndex = 0;
// 将结果数据先放入Vector中
Vector<String> v = new Vector<String>();
// 返回的结果字符串数组
String[] str = new String[1];
// 存储取子串时起始位置
int index = 0;
// 获得匹配子串的位置
startIndex = original.indexOf(regex);
// ece.tool.Tools.log("startIndex : " + startIndex);
if (startIndex == -1) {
str[0] = original;
return str;
}
// 如果起始字符串的位置小于字符串的长度,则证明没有取到字符串末尾。-1代表取到了末尾
while (startIndex < original.length() && startIndex != -1) {
// 取子串
v.addElement(original.substring(index, startIndex));
// 设置取子串的起始位置
index = startIndex + regex.length();
// 获得匹配子串的位置
startIndex = original.indexOf(regex, startIndex + regex.length());
}
// 取结束的子串
v.addElement(original.substring(index));
// 将Vector对象转换成数组
str = new String[v.size()];
for (int i = 0; i < v.size(); i++) {
str[i] = (String) v.elementAt(i);
}
// 返回生成的数组
return str;
}
public static int COLOR_RGB(int r, int g, int b) {
return ((int) (((char) (r) | ((short) ((char) (g)) << 8)) | (((int) (char) (b)) << 16)));
}
public static int COLOR_R(int rgb) {
return (rgb << 24) >>> 24;
}
public static int COLOR_G(int rgb) {
return (rgb << 16) >>> 24;
}
public static int COLOR_B(int rgb) {
return (rgb << 8) >>> 24;
}
public static long getDateTimeNow() {
long nTimeNow = 0;
try {
Calendar cal = Calendar.getInstance();
nTimeNow = cal.getTimeInMillis();
cal = null;
} catch (Exception e) {
e.printStackTrace();
}
return nTimeNow;
}
public static long getDateTimeNowSecond() {
return getDateTimeNow() / 1000;
}
public static long getDateTimeFromString(String strDate) {
long nTimeNow = 0;
if (strDate == null) {
return 0;
}
try {
SimpleDateFormat myFmt2 = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
myFmt2.setTimeZone(TimeZone.getTimeZone("UTC"));
Date dt = myFmt2.parse(strDate.trim());
nTimeNow = dt.getTime();
} catch (Exception ex) {
}
return nTimeNow;
}
public static String getSimpleTimeString(long time) {
String strTemp = "";
Date dateCreate = new Date(time);
Date dateNow = new Date();
dateNow.setHours(0);
dateNow.setMinutes(0);
dateNow.setSeconds(0);
if (dateCreate.before(dateNow)) {
SimpleDateFormat myFmt2 = new SimpleDateFormat("MM-dd");
myFmt2.setTimeZone(TimeZone.getDefault());
strTemp = myFmt2.format(dateCreate);
} else {
SimpleDateFormat myFmt2 = new SimpleDateFormat("HH:mm");
myFmt2.setTimeZone(TimeZone.getDefault());
strTemp = myFmt2.format(dateCreate);
}
return strTemp;
}
public static String getSimpleTimeString2(long time) {
String strTemp = "";
Date dateCreate = new Date(time);
SimpleDateFormat myFmt2 = new SimpleDateFormat("HH:mm/MMdd");
myFmt2.setTimeZone(TimeZone.getDefault());
strTemp = myFmt2.format(dateCreate);
return strTemp;
}
public static String getSimpleTimeString3(long time) {
String strTemp = "";
Date dateCreate = new Date(time);
SimpleDateFormat myFmt2 = new SimpleDateFormat("MM-dd HH:mm:ss");
myFmt2.setTimeZone(TimeZone.getDefault());
strTemp = myFmt2.format(dateCreate);
return strTemp;
}
public static String getSimpleTimeString4(long time) {
String strTemp = "";
Date dateCreate = new Date(time);
SimpleDateFormat myFmt2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
myFmt2.setTimeZone(TimeZone.getDefault());
strTemp = myFmt2.format(dateCreate);
return strTemp;
}
public static String getSimpleTimeStringHMS(long time) {
String strTemp = "";
Date dateCreate = new Date(time);
SimpleDateFormat myFmt2 = new SimpleDateFormat("HH:mm:ss");
myFmt2.setTimeZone(TimeZone.getDefault());
strTemp = myFmt2.format(dateCreate);
return strTemp;
}
public static String getUtcTimeString(long time) {
String strTemp = "";
Date dateCreate = new Date(time);
SimpleDateFormat myFmt2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
myFmt2.setTimeZone(TimeZone.getTimeZone("UTC"));
strTemp = myFmt2.format(dateCreate);
return strTemp;
}
public static String getUnixTimeString(long time) {
String strTemp = "";
Date dateCreate = new Date(time*1000);
SimpleDateFormat myFmt2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
strTemp = myFmt2.format(dateCreate);
return strTemp;
}
public static String getUnixTimeStringMonthToDay(long time) {
String strTemp = "";
Date dateCreate = new Date(time*1000);
SimpleDateFormat myFmt2 = new SimpleDateFormat("yyyy-MM-dd");
strTemp = myFmt2.format(dateCreate);
return strTemp;
}
public static String getContractTimeString(long time) {
String strTemp = "";
Date dateCreate = new Date(time*1000);
SimpleDateFormat myFmt2 = new SimpleDateFormat("MMdd");
strTemp = myFmt2.format(dateCreate);
return strTemp;
}
public static String getTimeString(Date date) {
Calendar calen = Calendar.getInstance();
calen.setTime(date);
String strZero = "0000";
String strDateTime = "";
String strTemp = "";
strTemp = String.valueOf(Calendar.YEAR);
strTemp = strZero.substring(0, 4 - strTemp.length()) + strTemp;
strDateTime += strTemp;
strTemp = String.valueOf(Calendar.MONTH);
strTemp = strZero.substring(0, 2 - strTemp.length()) + strTemp;
strDateTime += strTemp;
strTemp = String.valueOf(Calendar.DAY_OF_MONTH);
strTemp = strZero.substring(0, 2 - strTemp.length()) + strTemp;
strDateTime += strTemp;
strTemp = String.valueOf(Calendar.HOUR_OF_DAY);
strTemp = strZero.substring(0, 2 - strTemp.length()) + strTemp;
strDateTime += strTemp;
strTemp = String.valueOf(Calendar.MINUTE);
strTemp = strZero.substring(0, 2 - strTemp.length()) + strTemp;
strDateTime += strTemp;
strTemp = String.valueOf(Calendar.SECOND);
strTemp = strZero.substring(0, 2 - strTemp.length()) + strTemp;
strDateTime += strTemp;
return strDateTime;
}
public static String getRandomString(int length) {
StringBuffer buffer = new StringBuffer(
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
StringBuffer sb = new StringBuffer();
Random r = new Random();
int range = buffer.length();
for (int i = 0; i < length; i++) {
int nTemp = r.nextInt(range);
sb.append(buffer.charAt(nTemp));
}
return sb.toString();
}
public static int getIntValue(String strTemp) {
int nRet = 0;
try {
if (strTemp == null) {
return nRet;
}
nRet = Integer.parseInt(strTemp);
} catch (Exception ex) {
nRet = 0;
}
return nRet;
}
public static BigDecimal getBigDecimalValue(String strTemp) {
BigDecimal temp = new BigDecimal("0.0");
try {
if (strTemp == null || strTemp.equals("")) {
return temp;
}
return new BigDecimal(strTemp);
} catch (Exception ex) {
}
return temp;
}
public static long getLongValue(String strTemp) {
long nRet = 0;
try {
if (strTemp == null) {
return nRet;
}
nRet = Long.parseLong(strTemp);
} catch (Exception ex) {
nRet = 0;
}
return nRet;
}
public static int getIntValue(String strTemp, int arg1) {
int nRet = 0;
try {
if (strTemp == null) {
return nRet;
}
nRet = Integer.parseInt(strTemp, arg1);
} catch (Exception ex) {
}
return nRet;
}
public static double getDoubleValue(String strTemp) {
double nRet = 0.0;
try {
nRet = Double.valueOf(strTemp);
} catch (Exception ex) {
}
return nRet;
}
public static float getFloatValue(String strTemp) {
float nRet = 0.0f;
try {
nRet = Float.parseFloat(strTemp);
} catch (Exception ex) {
nRet = 0.0f;
}
return nRet;
}
public static String getMD5(byte[] bytes) {
String strTemp = "";
try {
MessageDigest algorithm = MessageDigest.getInstance("MD5");
algorithm.reset();
algorithm.update(bytes);
return toHexString(algorithm.digest(), "");
} catch (Exception e) {
strTemp = "";
}
return strTemp;
}
public static String toHexString(byte[] bytes, String separator) {
StringBuilder hexString = new StringBuilder();
for (byte b : bytes) {
if (Integer.toHexString(0xFF & b).length() == 1)
hexString.append("0").append(Integer.toHexString(0xFF & b));
else
hexString.append(Integer.toHexString(0xFF & b));
}
return hexString.toString();
}
public static boolean CopyStream(InputStream is, OutputStream os) {
boolean bRet = false;
int nTotalSize = 0;
final int buffer_size = 1024;
try {
byte[] bytes = new byte[buffer_size];
for (;;) {
int count = is.read(bytes, 0, buffer_size);
if (count == -1) {
bRet = true;
break;
}
os.write(bytes, 0, count);
nTotalSize += count;
}
} catch (Exception ex) {
bRet = false;
}
if (nTotalSize <= 0) {
bRet = false;
}
return bRet;
}
public static int computeSampleSize(BitmapFactory.Options options,
int minSideLength, int maxNumOfPixels) {
int initialSize = computeInitialSampleSize(options, minSideLength,
maxNumOfPixels);
int roundedSize;
if (initialSize <= 8) {
roundedSize = 1;
while (roundedSize < initialSize) {
roundedSize <<= 1;
}
} else {
roundedSize = (initialSize + 7) / 8 * 8;
}
return roundedSize;
}
private static int computeInitialSampleSize(BitmapFactory.Options options,
int minSideLength, int maxNumOfPixels) {
double w = options.outWidth;
double h = options.outHeight;
int lowerBound = (maxNumOfPixels == -1) ? 1 : (int) Math.ceil(Math
.sqrt(w * h / maxNumOfPixels));
int upperBound = (minSideLength == -1) ? 128 : (int) Math.min(
Math.floor(w / minSideLength), Math.floor(h / minSideLength));
if (upperBound < lowerBound) {
// return the larger one when there is no overlapping zone.
return lowerBound;
}
if ((maxNumOfPixels == -1) && (minSideLength == -1)) {
return 1;
} else if (minSideLength == -1) {
return lowerBound;
} else {
return upperBound;
}
}
// decodes image and scales it to reduce memory consumption
public static Drawable decodeDrawableFile(String strFilename,
int inImageSize) {
try {
File f = new File(strFilename);
Bitmap b = decodeBitmapFile(f, inImageSize);
f = null;
BitmapDrawable draw = null;
if (b != null) {
draw = new BitmapDrawable(b);
}
return (draw);
} catch (Exception ex) {
return null;
}
}
// decodes image and scales it to reduce memory consumption
public static Bitmap decodeBitmapFile(String strFilename, int inImageSize) {
try {
File f = new File(strFilename);
Bitmap b = decodeBitmapFile(f, inImageSize);
f = null;
return (b);
} catch (Exception ex) {
return null;
}
}
// decodes image and scales it to reduce memory consumption
public static Bitmap decodeBitmapFile(File f, int inImageSize) {
try {
if (f == null) {
return null;
}
FileInputStream tempFile = new FileInputStream(f);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(tempFile, null, options);
options.inSampleSize = MiscUtil.computeSampleSize(options, -1,
inImageSize);
options.inJustDecodeBounds = false;
try {
Bitmap b = BitmapFactory.decodeStream(new FileInputStream(f),
null, options);
return (b);
} catch (OutOfMemoryError err) {
err.printStackTrace();
}
options = null;
tempFile.close();
tempFile = null;
return null;
} catch (Exception ex) {
return null;
}
}
// decodes image and scales it to reduce memory consumption
public static Bitmap decodeBitmapFile(InputStream tempFile, int inImageSize) {
try {
if (tempFile == null) {
return null;
}
if (inImageSize <= 0) {
Bitmap b = BitmapFactory.decodeStream(tempFile);
return (b);
} else {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(tempFile, null, options);
options.inSampleSize = MiscUtil.computeSampleSize(options, -1,
inImageSize);
options.inJustDecodeBounds = false;
try {
Bitmap b = BitmapFactory.decodeStream(tempFile, null,
options);
return (b);
} catch (OutOfMemoryError err) {
err.printStackTrace();
} catch (Exception err) {
err.printStackTrace();
}
options = null;
}
return null;
} catch (Exception ex) {
return null;
}
}
// 判断存储卡是否存在
public static boolean existSDcard() {
if (android.os.Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED)) {
return true;
} else
return false;
}
// json数据操作
public static JSONObject getNodeJSonItem(JSONObject jsonObject, String key) {
JSONObject temp = null;
try {
if (jsonObject == null) {
return null;
}
temp = (JSONObject) jsonObject.get(key);
} catch (Exception e) {
temp = null;
}
return temp;
}
public static JSONObject getNodeJSonItem(JSONArray jsonObject, int index) {
JSONObject temp = null;
try {
if (jsonObject == null) {
return null;
}
temp = (JSONObject) jsonObject.getJSONObject(index);
} catch (Exception e) {
temp = null;
}
return temp;
}
public static JSONArray getNodeJSonArray(JSONObject jsonObject, String key) {
JSONArray temp = null;
try {
if (jsonObject == null) {
return null;
}
temp = jsonObject.getJSONArray(key);
} catch (Exception e) {
temp = null;
}
return temp;
}
public static JSONObject getNodeJSonObject(JSONObject jsonObject, String key) {
JSONObject temp = null;
try {
if (jsonObject == null) {
return null;
}
temp = jsonObject.getJSONObject(key);
} catch (Exception e) {
temp = null;
}
return temp;
}
public static String getNodeJSonValue(JSONObject jsonObject, String key) {
String temp = "";
try {
if (jsonObject == null) {
return temp;
}
temp = jsonObject.getString(key);
} catch (Exception e) {
}
if (temp == null) {
temp = "";
}
return temp;
}
public static boolean deleteFile(String strFile) {
boolean bRet = false;
try {
if (strFile == null || strFile.equals("")) {
return true;
}
File file = new File(strFile);
if (file.exists()) {
file.delete();
}
file = null;
bRet = true;
} catch (Exception ex) {
ex.printStackTrace();
bRet = false;
}
return bRet;
}
public static String getLowerString(String str) {
if (str == null || str.equals("")) {
return "";
}
int size = str.length();
char[] chs = str.toCharArray();
for (int i = 0; i < size; i++) {
if (chs[i] <= 'Z' && chs[i] >= 'A') {
chs[i] = (char) (chs[i] + 32);
} else if (chs[i] <= 'z' && chs[i] >= 'a') {
chs[i] = (char) (chs[i] - 32);
}
}
return new String(chs);
}
public static ArrayList<String> arrayStringToArrayList(String str) {
ArrayList<String> tempList = new ArrayList<String>();
if (str == null || str.equals("")) {
return tempList;
}
try {
String[] tempArray = null;
// select id
String strTemp = str;
List<String> arrayList = null;
if (strTemp != null && strTemp.length() > 0) {
strTemp = strTemp.substring(1, strTemp.length() - 1);
if (strTemp.length() > 0) {
strTemp = strTemp.replace(" ", "");
tempArray = strTemp.split(",");
arrayList = Arrays.asList(tempArray);
}
}
if (arrayList != null) {
tempList.addAll(arrayList);
}
} catch (Exception ex) {
ex.printStackTrace();
}
return tempList;
}
static public String vectorToString(Vector<String> vector, String delimiter) {
String strRet = "";
try {
if (vector == null) {
return strRet;
}
StringBuilder vcTostr = new StringBuilder();
if (vector.size() > 0) {
vcTostr.append(vector.get(0));
for (int i = 1; i < vector.size(); i++) {
vcTostr.append(delimiter);
vcTostr.append(vector.get(i));
}
}
strRet = vcTostr.toString();
} catch (Exception ex) {
ex.printStackTrace();
strRet = "";
}
return strRet;
}
static public String listToString(ArrayList<String> vector, String delimiter) {
String strRet = "";
try {
if (vector == null) {
return strRet;
}
StringBuilder vcTostr = new StringBuilder();
if (vector.size() > 0) {
vcTostr.append(vector.get(0));
for (int i = 1; i < vector.size(); i++) {
vcTostr.append(delimiter);
vcTostr.append(vector.get(i));
}
}
strRet = vcTostr.toString();
} catch (Exception ex) {
ex.printStackTrace();
strRet = "";
}
return strRet;
}
static public Vector<String> stringToVector(String str, String delimiter) {
Vector<String> tempList = new Vector<String>();
try {
if (str == null || str.equals("") || delimiter == null
|| delimiter.equals("")) {
return tempList;
}
int step = delimiter.length();
int index = 0, offset = 0;
while ((index = str.indexOf(delimiter, index + step)) != -1) {
tempList.add(str.substring(offset, index));
offset = index + step;
}
} catch (Exception ex) {
ex.printStackTrace();
}
return tempList;
}
static public String roundFormat(double num, int len) {
String strTemp = "";
try {
BigDecimal b = new BigDecimal(String.valueOf(num));
BigDecimal f1 = b.setScale(len, BigDecimal.ROUND_DOWN);
strTemp = f1.toString();
} catch (Exception ex) {
ex.printStackTrace();
strTemp = "";
}
return strTemp;
}
static public String roundFormat(float num, int len) {
String strTemp = "";
try {
BigDecimal b = new BigDecimal(String.valueOf(num));
BigDecimal f1 = b.setScale(len, BigDecimal.ROUND_DOWN);
strTemp = f1.toString();
} catch (Exception ex) {
ex.printStackTrace();
strTemp = "";
}
return strTemp;
}
static public String roundFormat(String num, int len) {
String strTemp = "";
try {
if(num == null || num.equals(""))
{
return strTemp;
}
BigDecimal b = new BigDecimal(num);
BigDecimal f1 = b.setScale(len, BigDecimal.ROUND_DOWN);
strTemp = f1.toString();
} catch (Exception ex) {
ex.printStackTrace();
strTemp = "";
}
return strTemp;
}
static public String roundFormat(BigDecimal b, int len) {
String strTemp = "";
try {
BigDecimal f1 = b.setScale(len, BigDecimal.ROUND_DOWN);
strTemp = f1.toString();
} catch (Exception ex) {
ex.printStackTrace();
strTemp = "";
}
return strTemp;
}
public static boolean isEmail(String strEmail) {
boolean bRet = false;
try {
String strPattern = "^[a-zA-Z0-9][\\w\\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\\w\\.-]*[a-zA-Z0-9]\\.[a-zA-Z0-9][a-zA-Z0-9\\.]*[a-zA-Z0-9]$";
Pattern p = Pattern.compile(strPattern);
Matcher m = p.matcher(strEmail);
bRet = m.matches();
} catch (Exception ex) {
ex.printStackTrace();
bRet = false;
}
return bRet;
}
public static boolean isAppOnForeground(Context context) {
// Returns a list of application processes that are running on the
// device
ActivityManager activityManager = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
String packageName = context.getPackageName();
List<RunningAppProcessInfo> appProcesses = activityManager
.getRunningAppProcesses();
if (appProcesses == null)
return false;
for (RunningAppProcessInfo appProcess : appProcesses) {
// The name of the process that this object is associated with.
if (appProcess.processName.equals(packageName)
&& appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
return true;
}
}
return false;
}
// public static float getMaxAmount(AccuAmount bids, AccuAmount asks, int size) {
// float price = 1;
// try {
// boolean bSet = false;
//
// int length = bids.getAmount().length > size ? size : bids.getAmount().length;
// for (int i = 0; i < length; i++) {
// if (i == 0) {
// price = bids.getAmount()[0];
// bSet = true;
// } else {
// if (price < bids.getAmount()[i]) {
// price = bids.getAmount()[i];
// }
// }
// }
//
// length = asks.getAmount().length > size ? size : asks.getAmount().length;
// for (int i = 0; i < length; i++) {
// if(!bSet)
// {
// if (i == 0) {
// price = asks.getAmount()[0];
// bSet = true;
// }
// }
// else
// {
// if (price < asks.getAmount()[i]) {
// price = asks.getAmount()[i];
// }
// }
// }
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// return price;
// }
}