📄 strings.java
字号:
package com.hiany.util;
import java.io.UnsupportedEncodingException;
import java.util.StringTokenizer;
import org.apache.log4j.Logger;
public class Strings {
static Logger logger = Logger.getLogger(Strings.class);
/**
* 生成指定长度的随机字符串,包含数字、大写字母、小写字母;
*
* @param length
* @return
*/
public static String radmonCharecters(int length) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
char n = (char) (Math.random() * 62);
if (n < 10) {
n += 48; // 数字
} else if (n < 36) {
n = (char) ((n - 10) + 65); // 大写字母
} else {
n = (char) ((n - 36) + 97); // 小写字母
}
sb.append(n);
}
return sb.toString();
}
/**
* 生成指定长度的随机16进制数;
*
* @param length
* @return
*/
public static String radmonHexs(int length) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
char n = (char) (Math.random() * 16);
if (n < 10) {
n += 48; // 数字
} else {
n = (char) ((n - 10) + 97); // 小写字母
}
sb.append(n);
}
return sb.toString();
}
/**
* 生成指定长度的随机数字串;
*
* @param length
* @return
*/
public static String radmonNumbers(int length) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
int n = (int) (Math.random() * 10);
sb.append(n);
}
return sb.toString();
}
/**
* 计算StringBuffer中指定字符串出现的次数;
*
* @param sb
* 源字符串缓冲区
* @param str
* 要计算出现次数的字符串
* @return
*/
public static int countWords(StringBuffer sb, String str) {
int cnt = 0;
for (int pos = 0;;) {
pos = sb.indexOf(str, pos);
if (pos < 0) {
break;
}
cnt++;
if (pos < sb.length() + str.length()) {
pos += str.length();
} else {
break;
}
}
return cnt;
}
/**
* 把字节数组转换成16进制(每字节成为2位16进制字符)的字符串
*
* @param buf
* @return
*/
public static String bytesToHexString(byte[] buf) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < buf.length; i++) {
int b = new Byte(buf[i]).intValue() + 128;
sb.append(String.format("%02x", b));
}
return sb.toString();
}
/**
* 把16进制(每字节成为2位16进制字符)的字符串转换成字节数组<br/>
* <b>输入的字符串长度必须是双数,否则最后的单个字符会被丢弃</b>
* @param str
* @param buf
* @return 返回字节数组的长度
*/
public static byte[] hexStringToBytes(String str) {
byte[] buf = new byte[8192];
byte[] buffer;
int i = 0;
for (i = 0; i < str.length() - 1; i += 2) {
int a = Integer.parseInt(str.substring(i, i + 2), 16);
byte b = (byte) (a - 128);
buf[i / 2] = new Integer(b).byteValue();
}
buffer = new byte[i / 2];
for (int j = 0; j < i / 2; j++) {
buffer[j] = buf[j];
}
return buffer;
}
/**
* 把字符串IP转换成raw IP
*
* @param ip
* @return
*/
public static byte[] parseRawIp(String ip) {
byte[] rawIp = new byte[4];
StringTokenizer st = new StringTokenizer(ip, ".");
int i = 0;
while (st.hasMoreTokens() && i < 4) {
rawIp[i] = new Integer(Integer.parseInt(st.nextToken()))
.byteValue();
i++;
}
return rawIp;
}
/**
* 把UTF-16LE编码的字符串转换为UTF-8的字符串(主要是把英文、数字转换为单字节)
* @param str
* @return
*/
public static String utf16ToUtf8(String str) {
try {
String str2 = new String(str.getBytes("UTF-16"), "UTF-8");
System.out.println("str2:" + str2);
StringBuffer sb = new StringBuffer();
for (int i = 0; i < str2.length(); i++) {
if (str2.codePointAt(i) != '\0' && str2.codePointAt(i)<=255 ) {
sb.append(str2.charAt(i));
logger.debug("charAt " + i + "[" + str2.charAt(i)
+ ","+ str2.codePointAt(i) +"] append.");
}
}
logger.debug("sb:" + sb.toString());
return sb.toString();
} catch (UnsupportedEncodingException ex) {
ex.printStackTrace();
return null;
}
}
/**
* 把UTF-8编码的字符串转换为UTF-16LE的字符串(只能把英文、数字转换为双字节)
* @param str
* @return
*/
public static String utf8ToUtf16le(String str) {
StringBuffer sb = new StringBuffer();
//try {
for (int i = 0; i < str.codePointCount(0, str.length()); i++) {
if ( str.codePointAt(i)<=255 ) {
String c = "00";
c += Integer.toString(str.codePointAt(i), 16);
logger.debug("code in UTF-8:"+ c);
int b = Integer.parseInt(c, 16);
logger.debug("code in UTF-16:"+ Integer.toString(b, 16));
sb.appendCodePoint(b);
}else{
sb.appendCodePoint(str.codePointAt(i));
logger.debug("code in UTF-16(No change):"+ Integer.toString(str.codePointAt(i), 16));
}
}
return sb.toString();
//} catch (UnsupportedEncodingException ex) {
// ex.printStackTrace();
// return null;
//}
}
/**
* 把字符串开头、末尾的(双字节)空格去掉
* @param str
* @return
*/
public static StringBuffer utf16Trim(StringBuffer sb){
//去掉开头的空格
if(sb == null || sb.length()<1){
return sb;
}
while(sb.codePointAt(0) == '\u2000'){
sb.deleteCharAt(0);
}
//去掉末尾的空格
int i = sb.codePointCount(0, sb.length()-1);
while(sb.codePointAt(i) == '\u2000' ){
sb.deleteCharAt(sb.length()-1);
i--;
}
return sb;
}
public static void main(String args[]) {
logger.debug("randamNumbers:[" + Strings.radmonNumbers(6) + "]");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -