public static String reverse(String str){
if(str == null || str.length() <= 1){
return str;
}
return reverse(str.substring(1))+str.charAt(0);
}
/**
* 按照指定字节长度截取字符串,防止中文被截成一半的问题
* @param s 源字符串
* @param length 截取的字节数
* @return 截取后的字符串
* @throws UnsupportedEncodingException
*/
public static String cutString(String s, int length) throws UnsupportedEncodingException{
byte[] bytes = s.getBytes("Unicode");
int n = 0; // 表示当前的字节数
int i = 2; // 要截取的字节数,从第3个字节开始
for (; i < bytes.length && n < length; i++){
// 奇数位置,如3、5、7等,为UCS2编码中两个字节的第二个字节
if (i % 2 == 1){
n++; // 在UCS2第二个字节时n加1
}
else{
// 当UCS2编码的第一个字节不等于0时,该UCS2字符为汉字,一个汉字算两个字节
if (bytes[i] != 0){
n++;
}
}
}
// 如果i为奇数时,处理成偶数
if (i % 2 == 1){
// 该UCS2字符是汉字时,去掉这个截一半的汉字
if (bytes[i - 1] != 0){
i = i - 1;
}
// 该UCS2字符是字母或数字,则保留该字符
else{
i = i + 1;
}
}
return new String(bytes, 0, i, "Unicode");
}
/**
* 获取一个正整数的二进制有多少个1
* @param n
* @return
*/
public static int getIntCount(int n){
int result = 0;
while(n!=0){
result++;
n = n&(n-1);
}
return result;
}
/**
* 判断一个数是否是2的幂
* @param n
* @return
*/
public static boolean isResult(int n){
if((n&(n-1)) == 0){
return true;
}
return false;
}
/**
* 查找素数
* @param n
*/
public static void getNum(int n){
if(n<2) return;
for(int i=2;i<=n;i++){
int j=2;
while(j<=i){
if(j==i){
System.out.print(i+" ");
break;
}
if(i%j!=0){
j++;
}else{
break;
}
}
}
}
/**
* 递归求阶层
* @param n
*/
public static int factorial(int n){
int num=1;
if(n>1){
num = n*factorial(n-1);
}
return num;
}
public static int feibo(int n){
if(n==1 || n==2){
return 1;
}else{
return feibo(n-1) + feibo(n-2);
}
}