package hdgl.util; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 字符串的辅助方法 * @author elm * */ public class StringHelper { /** * 不能实例化辅助类 */ private StringHelper(){ } /** * <p>将字符串编码为文件路径名<p> * <p>规则如下:</p> * <ul> * <li>以下字符将被原样输出:a-z, A-Z, 0-9, _(下划线), -(减号)</li> * <li>三个分隔线字符: / | \ 将会被转换为平台的路径分隔符,Windows下是'\\', Unix下是'/'</li> * <li>其它字符会被转换为"$xxxx",其中xxxx是该字符的十六进制Unicode值</li> * </ul> * @param name * @return */ public static String filenameEncode(String name){ StringBuilder fn=new StringBuilder(); for(int i=0;i<name.length();i++){ char c=name.charAt(i); if((c>'a'&&c<'z')||(c>'A'&&c<'Z')||(c>'0'&&c<'9')||c=='_'||c=='-'){ fn.append(c); }else if(c=='/'||c=='\\'||c=='|'){ if(fn.length()>0){ fn.append(".d"); } fn.append(File.separatorChar); }else{ int num=(int)c; fn.append('$'); fn.append(String.format("%4x", num)); } } fn.append(".k"); return fn.toString(); } public static String formatTimestamp(long timestamp){ SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); return format.format(new Date(timestamp)); } public static String makePath(String part1, String part2){ if(part1.endsWith("/")){ part1 = part1.substring(0, part1.length() - 1); } if(part2.startsWith("/")){ part2 = part2.substring(1); } return part1+"/"+part2; } static final Pattern NUM_PATTERN = Pattern.compile(".*?(\\d+)"); public static int getLastInt(String str){ Matcher matcher = NUM_PATTERN.matcher(str); if(matcher.matches()){ return Integer.parseInt(matcher.group(1)); }else{ throw new NumberFormatException(); } } public static String fillToLength(int number) { String str = String.format("%05d", number); return str; } public static String bytesToString(byte[] value) { StringBuilder result = new StringBuilder(); for (int i = 0; i < value.length; i++) { int tmp = (int)value[i] + 128; String str = String.format("%03d", tmp); result.append(str); } return result.toString(); } public static byte[] stringToBytes(String value) { int len = value.length() / 3; byte[] result = new byte[len]; for (int i = 0; i < len; i++) { result[i] = (byte)(Integer.parseInt(value.substring(i*3, i*3+3)) - 128); } return result; } public static String fillToMakeOrder(String value) { int pos = value.indexOf(" "); int v = Integer.parseInt(value.substring(pos + 1)); return value.substring(0, pos + 1) + String.format("%011d", v); } }