Java数据类型转换已经字符串处理工具类
package com.project.system.util;import java.util.Calendar;import java.util.Date;import java.util.TimeZone;import java.util.Vector; /**** * {@docRoot 所有的数据转换处理 } * @version 1.0 * @since 2011\4\13 * ****/public class DataTypeChange {/*** * 表 Java中的简单类型 简单类型 boolean byte char short int long float double void 二进制位数 1 8 16 16 32 64 32 64 -- 字节数 1 1 2 2 4 8 4 8 0C++范围 1 1 1 2 4 4 4 8 0 封装器类 Boolean Byte Character Short Integer Long Float Double Void 这里的java和c++中的char类型的大小是不同的 * ***/ // 将字符串转换成一定长度的字节数组 /*** * @param src 需要输入处理的源字符串 * @param byte_len 固定大小 * @return byte[] * String --> byte[] * **/ public static byte[] string2Bytes(String src,int byte_len){ byte[] b1 = new byte[byte_len];StringBuffer tempb = new StringBuffer(); // 临时填充数据int temp_len = 0; // 临时字符的大 int src_len = src.length(); // 需要转换的字符串的长度char zero = '\0';if(src_len<byte_len){temp_len = byte_len - src_len; // 计算填充位的大小for(int i=0;i<temp_len;i++){ // 循环填充占位符tempb.append(zero);} b1 = (src+tempb.toString()).getBytes(); //tempb.delete(0, temp_len); // 清空临时字符}else{ // 如果大于此规定的长度,则直接转为btye类型b1 = src.getBytes();} return b1; } // 将字符串转换成一定长度的字符串,不足的添加'\0'标识 /*** * @param src 需要输入处理的源字符串 * @param byte_len 固定大小 * @return String 返回的长度为byte_len的字符串 * * String --> fillString * **/ public static String fillString(String src,int byte_len){ String fill_str = "";StringBuffer tempb = new StringBuffer(); // 临时填充数据int temp_len = 0; // 临时字符的大 int src_len = src.length(); // 需要转换的字符串的长度char zero = '\0';if(src_len<byte_len){temp_len = byte_len - src_len; // 计算填充位的大小for(int i=0;i<temp_len;i++){ // 循环填充占位符tempb.append(zero);}fill_str = src+tempb.toString();} else{fill_str = src;}return fill_str; } // byte[] --> intpublic static int bytes2Int1(byte[] bytes) { int num = bytes[0] & 0xFF; num |= ((bytes[1] << 8) & 0xFF00); return num; }// byte[] --> intpublic static int bytes2Int2(byte[] intByte) { int fromByte = 0; for (int i = 0; i < 2; i++) { int n = (intByte[i] < 0 ? (int)intByte[i] + 256 : (int)intByte[i]) << (8 * i); System.out.println(n); fromByte += n; } return fromByte; } // bytes to intpublic static int bytesToInt(byte[] bytes) { int addr = bytes[0] & 0xFF; addr |= ((bytes[1] << 8) & 0xFF00); addr |= ((bytes[2] << 16) & 0xFF0000); addr |= ((bytes[3] << 24) & 0xFF000000); return addr; }// byte[] --> Stringpublic static String bytes2String(byte b[]){String result_str = new String(b);return result_str;}// int --> byte[]public static byte[] int2Bytes(int res) {byte[] targets = new byte[4]; targets[0] = (byte) (res & 0xff);// 最低位 targets[1] = (byte) ((res >> 8) & 0xff);// 次低位 targets[2] = (byte) ((res >> 16) & 0xff);// 次高位 targets[3] = (byte) (res >>> 24);// 最高位,无符号右移。 return targets; } // char --> byte[]public static byte[] char2Bytes(char ch){ int temp=(int)ch; byte[] b=new byte[2]; for (int i=b.length-1;i>-1;i--){ b[i] = new Integer(temp&0xff).byteValue();//将最高位保存在最低位 temp = temp >> 8; //向右移8位 } return b;}// char --> int 8-->16public static int char2Int(char c){return c;}// int --> char 16-->8需要强制转换public static char int2Char(int i){return (char)i;} /*** * 数据之间的转换操作 ***/// 数据大于10000的时候进行处理public static String getF10000(float f1){ String str = ""; double d1 = 0.0d; if(f1>10000.0f&&f1<100000000.0d){// 数据在10万到1亿之间的数据 d1 = f1/10000.0f; str = DataTypeChange.save2bit(d1)+"万"; }else if(f1>100000000.0d){ d1 = (double)f1/100000000.0d; str = DataTypeChange.save2bit(d1)+"亿"; }else{ d1 = f1; str = DataTypeChange.save2bit(d1)+""; } return str; } // 截取byte数组从start到end的位置转换成strng /*** * @input src 待截取字节数组 * start 待截取字节数组的开始位置 * src_size 截取的长度 == 数据类型的长度 * * @output int 字节截取转换成int后的结果 * * **/public static int bytesSub2Int(byte[] src,int start,int src_size) { //if(src.length==0){byte[] resBytes = new byte[src_size]; System.arraycopy(src, start, resBytes, 0, src_size); return bytesToInt(resBytes);//}else{//return 0;//} } /*** * @input src 待截取字节数组 * start 待截取字节数组的开始位置 * src_size 截取的长度 == 数据类型的长度 * * @output String 字节截取转换成String后的结果 * * **/public static String bytesSub2String(byte[] src,int start,int src_size) { byte[] resBytes = new byte[src_size];System.arraycopy(src, start, resBytes, 0, src_size); // System.out.println(" len ==" +resBytes.length // + " sub_bytes = " + bytes2Int1(resBytes)); return bytes2String(resBytes);} /*** * @input src 待截取字节数组 * start 待截取字节数组的开始位置 * src_size 截取的长度 == 数据类型的长度 * * @output 从start下标开始长度为src_size长度的字节数组结果 * * **/public static byte[] bytesSub(byte[] src,int start,int src_size) { byte[] resBytes = new byte[src_size];System.arraycopy(src, start, resBytes, 0, src_size); return resBytes;}/** * splite the src with sep, and place them in a array * * @param src * @param sep * @return */public static String[] splite(String src, String sep) {Vector v = new Vector();int index;int fromIndex = 0;while ((index = src.indexOf(sep, fromIndex)) != -1) {v.addElement(src.substring(fromIndex, index));fromIndex = index + sep.length();}v.addElement(src.substring(fromIndex, src.length()));String[] result = new String[v.size()];for (int i = 0; i < result.length; i++) {result[i] = (String) v.elementAt(i);}return result;}/** * splite the src with sep, place them in a array, and replace sep with * sep_code * * @param src * @param sep * @param sep_code * @return */public static String[] splite(String src, String sep, String sep_code) {String[] result = splite(src, sep);replace(result, sep_code, sep);return result;}/** * replace the child string with the newStr in the src * * @param src * @param oldStr * @param newStr * @return */public static String replace(String src, String oldStr, String newStr) {int oldSize = oldStr.length();int newSize = newStr.length();int margin = newSize - oldSize;int offset = 0;StringBuffer sb = new StringBuffer(src);int index;int fromIndex = 0;while ((index = src.indexOf(oldStr, fromIndex)) != -1) {fromIndex = index + oldSize;sb.delete(index + offset, fromIndex + offset);sb.insert(index + offset, newStr);offset += margin;}return sb.toString();}/** * replace the child string with the newStr in the String of the array * * @param src * @param oldStr * @param newStr */public static void replace(String[] src, String oldStr, String newStr) {for (int i = 0; i < src.length; i++) {src[i] = replace(src[i], oldStr, newStr);}}/** * * @param para * the parameter name * @param src * the text * @return * the value of the parameter */public static String getParaVal(String para, String src) {String paraval = null;String tempPara = para;int s1 = 0;int s2 = 0;int len = 0;int httplen = 0;if (tempPara == null || src == null)return "";tempPara = tempPara + "=";len = tempPara.length();httplen = src.length();if (httplen == 0)return "";if (len == 0)// || len > 9)return "";s1 = src.indexOf(tempPara); // find the parameter nameif (s1 == -1)return "";s2 = src.indexOf('&', s1);// find next &if (s2 == -1) {// the last one parameterparaval = src.substring(s1 + len);} else {paraval = src.substring(s1 + len, s2);}return paraval;}/** * * @param para * the parameter name * @param src * the text * @param sep * the separator * @return * the value of the parameter */public static String getParaValEx(String para, String src, char sep) {String paraval = null;String tempPara = para;int s1 = 0;int s2 = 0;int len = 0;int httplen = 0;if (tempPara == null || src == null)return "";tempPara = tempPara + "=";len = tempPara.length();httplen = src.length();if (httplen == 0)return "";if (len == 0)// || len > 9)return "";s1 = src.indexOf(tempPara); //find the parameter nameif (s1 == -1)return "";s2 = src.indexOf(sep, s1);// find next &if (s2 == -1) {// the last one parameterparaval = src.substring(s1 + len);} else {paraval = src.substring(s1 + len, s2);}return paraval;}//byte[]转float /** * byte[] to float * @param b * @param index * @return float */ public static float getFloat(byte[] b,int index) throws Exception{ int i = 0; i = ((((b[index + 3]&0xff)<<8 | (b[index + 2]&0xff))<<8) | (b[index + 1]&0xff))<<8 | (b[index + 0]&0xff); return Float.intBitsToFloat(i); } // byte[] --> float public static float bytes2Float(byte[] b){ float f = 0f; try { f = getFloat(b,0);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} return f; } //bytes to intpublic static short bytesToShort(byte[] bytes) { int addr = bytes[0] & 0xFF; addr |= ((bytes[1] << 8) & 0xFF00); return (short)addr; } /*********** 保留有效数字的小数点后位数设置 start ************/ // 保留2位有效数字 public static double save2bit(double t1){ double result = (double) (int) ((t1 + 0.005) * 100.0) / 100.0; return result; } // 保留1位有效数字 public static double save1bit(double t1){ double result = (double) (int) ((t1 + 0.005) * 10.0) / 10.0; return result; } /*********** 保留有效数字的小数点后位数设置 end ************/ /*********** 日期类型格式转换以及时差参数处理 start ************/ // Long类型的毫秒转为日期字符 public static String getStrDate(long time){ String str = ""; Date date = new Date(time); TimeZone china=TimeZone.getTimeZone("GMT+08:00"); //时区设置 Calendar calendar = Calendar.getInstance(china); calendar.setTime(date); String mon = String.valueOf(calendar.get(Calendar.MONTH)+1); if(mon.length()==1){ mon = "0"+mon; } String day = String.valueOf(calendar.get(Calendar.DAY_OF_MONTH)); if(day.length()==1){ day = "0"+day; } str = String.valueOf(calendar.get(Calendar.YEAR)) + mon + day; return str; } // k线左侧显示的时间格式 月份天数小时分钟 public static String getStrDTime(long time){ String str = ""; Date date = new Date(time); TimeZone china=TimeZone.getTimeZone("GMT+08:00"); //时区设置 Calendar calendar = Calendar.getInstance(china); calendar.setTime(date); String mon = String.valueOf(calendar.get(Calendar.MONTH)+1); if(mon.length()==1){ mon = "0"+mon; } String day = String.valueOf(calendar.get(Calendar.DAY_OF_MONTH)); if(day.length()==1){ day = "0"+day; } String hour = String.valueOf(calendar.get(Calendar.HOUR_OF_DAY)); if(hour.length()==1){ hour = "0"+hour; } String minute = String.valueOf(calendar.get(Calendar.MINUTE)); if(minute.length()==1){ minute = "0"+minute; } str = mon + day + hour + minute; return str;} // 获取当天是星期几 public static int getNowMinute(long time){ int week = 1; Date date = new Date(time); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); week = calendar.get(Calendar.MINUTE); return week; } // 获取当天是星期几 public static int getNowWeek(long time){ int week = 1; Date date = new Date(time); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); week = calendar.get(Calendar.DAY_OF_WEEK); return week; } // 获取当天几点 public static int getNowHour(long time){ int week = 1; Date date = new Date(time); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); week = calendar.get(Calendar.HOUR_OF_DAY); return week; } // 获取当天是这个月的第几天 public static int getNowMonth(long time){ int month = 1; Date date = new Date(time); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); month = calendar.get(Calendar.WEEK_OF_MONTH); return month; } // 获取当天是第几个月 public static int getNMonth(long time){ int month = 1; Date date = new Date(time); TimeZone china=TimeZone.getTimeZone("GMT+08:00"); //时区设置 Calendar calendar = Calendar.getInstance(china); calendar.setTime(date); month = calendar.get(Calendar.MONTH); return month;} // k线底部日期的显示格式 public static String getButtomDate(String timeStr){ String str = ""; String mon = timeStr.substring(4, 6); String day = timeStr.substring(6, 8); str = mon +"/"+ day; return str; } // step = 时差的大小 type=0 向前 type=1向后 public static long getTimeCha(long step,int type){ long ret = 0; long now = System.currentTimeMillis(); //获取当前的时间种子 if(type==0){ ret = now + step; }else{ ret = now - step; } return ret; } // 获取时间,精确到分钟 public static String getStrTime(long timess){ String str = ""; Date date = new Date(timess); TimeZone china=TimeZone.getTimeZone("GMT+08:00"); //时区设置 Calendar calendar = Calendar.getInstance(china); calendar.setTime(date); String hour = String.valueOf(calendar.get(Calendar.HOUR_OF_DAY)); String minute = String.valueOf(calendar.get(Calendar.MINUTE)); if(minute.length()==1){ minute = "0"+minute; } if(hour.length()==1){ hour = "0"+hour; } str = hour + ":" + minute; return str; } // 获取分时时间,当天0点开始 public static long getNowDayZone(){ long time = System.currentTimeMillis(); Date date = new Date(time); TimeZone china=TimeZone.getTimeZone("GMT+08:00"); //时区设置 Calendar calendar = Calendar.getInstance(china); calendar.setTime(date); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); return calendar.getTime().getTime(); } /*** * 根据设置获取当天的时间 * @param h = 小时;m = 分钟; s = 秒; * @return long 当前时间所代表的毫秒数 * ***/ public static long getTimesDataBySet(int h,int m,int s){ long time = System.currentTimeMillis(); Date date = new Date(time); TimeZone china=TimeZone.getTimeZone("GMT+08:00"); //时区设置 Calendar calendar = Calendar.getInstance(china); calendar.setTime(date); calendar.set(Calendar.HOUR_OF_DAY, h); calendar.set(Calendar.MINUTE, m); calendar.set(Calendar.SECOND, s); return calendar.getTime().getTime(); } /*** * 判断今天天是星期几 * @param d = 天 2 ==星期1, 6 ==星期5 * @return long 当前时间所代表的毫秒数 * ***/ public static int getWeekDayBySet(){ int week = 1; long t = System.currentTimeMillis(); Date date = new Date(t); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); week = calendar.get(Calendar.DAY_OF_WEEK); return week; } /* * 判断一下时间是否在开盘时间内 * */ public static boolean isOpenTime(){ long t = System.currentTimeMillis(); int a = getWeekDayBySet();// 如果这个数字在2-6之间,则符合要求 longamOpen = getTimesDataBySet(9, 30, 0); longamClose = getTimesDataBySet(11, 30, 0); longpmOpen = getTimesDataBySet(13, 0, 0); long pmClose = getTimesDataBySet(15, 0, 0);// System.out.println(" === week == " + a + " t = "+ t +" pmOpen = " + pmOpen); if(a>1&&a<7){ if((t>=amOpen&&t<=amClose)||(t>=pmOpen&&t<=pmClose)){ return true; // 只有日期在周一到周五之间,时间为开盘时间的时候才会执行数据刷新 }else{ return false; } }else{ return false; }} public static boolean isOpenT(){ long t = System.currentTimeMillis(); int a = getWeekDayBySet();// 如果这个数字在2-6之间,则符合要求 longamOpen = getTimesDataBySet(9, 30, 0); long pmClose = getTimesDataBySet(15, 0, 0);// System.out.println(" === week == " + a + " t = "+ t +" pmOpen = " + pmOpen); if(a>1&&a<7){ if((t>=amOpen&&t<=pmClose)){ return true; // 只有日期在周一到周五之间,时间为开盘时间的时候才会执行数据刷新 }else{ return false; } }else{ return false; }} /*********** 日期类型格式转换以及时差参数处理 end ************/ /*** * 数据排序算法 * ***/ /** * 冒泡排序 * @input 一个未排序的数组 * * @return 按照从小到大排序完成的数组 */ public static int[] doSort(int source[]) { int length = source.length; for (int i = length - 1; i > 1; i--) { for (int j = 0; j < i; j++) if (source[j] > source[j + 1]) { int tmp = source[j]; source[j] = source[j + 1]; source[j + 1] = tmp; } } return source; } // float 类型的方法重载 public static float[] doSort(float source[]) { int length = source.length; for (int i = length - 1; i > 0; i--) { for (int j = 0; j < i; j++) if (source[j] > source[j + 1]) { float tmp = source[j]; source[j] = source[j + 1]; source[j + 1] = tmp; } } return source; } // vector 类型的方法重载 public static Vector doKLineVectorSort(Vector vv) { Vector vvs = new Vector(); int size = vv.size(); for(int i=size-1;i>=0;i--){ vvs.addElement(vv.elementAt(i)); } return vvs; } // 过滤特殊字符 public static String filterString(String str){ StringBuffer buffer = new StringBuffer(); String filter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; char c,cc; for (int i = 0; i < str.length(); i++) { c = str.charAt(i); // System.out.println( i + " == " + c); if(c<'0'||c>'9'){ // System.out.println("含有非法字符:" + c); for(int j=0;j<26;j++){ cc = filter.charAt(j); if(cc==c){ buffer.append(c); } } }else{ buffer.append(c); } } return buffer.toString(); } // 数据处理,去空和替换特殊字符 “=" ”" ,'\0' public static String getFilterText(String src){ // 先替换字符 String str = src.trim(); String str1 =DataTypeChange.replace(str, "“", "\""); String str2 = DataTypeChange.replace(str1, "”", "\""); String str3 = DataTypeChange.replace(str2, "·", "."); /* StringBuffer buffer = new StringBuffer(); char c; char fi = '\0'; for(int i=0;i<str3.length();i++){ c = str3.charAt(i); if(c!=fi){// 如果存在\0则跳过添加 buffer.append(c); } } buffer.toString(); */ return str3; } }
?