package com.xiangshui;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
/**
* 字符串处理类
* @author liuqixiang
* @version 1.0 2018-09-07
*/
public class StringUtils {
public static final String[] EMPTY_STRING_ARRAY = new String[0];
/**
* 判断字符串是否为全数字,如果为全数字返回true
* @author liuqixiang
* @param 参数1:待判断字符串
* @return boolean
* @version 1.0 2018-09-07
**/
public static boolean isAllNumber(String str){
if(str!=""){
for (int i=0; i<str.length(); i++) {
char c = str.charAt(i);
if (c<'0' || '9'<c) {
return false;
}
}
return true;
}else{
return false;
}
}
/**
* 判断字符串是否为全中文
* @author liuqixiang
* @param 参数1:待判断字符串
* @return boolean
* @version 1.0 2018-09-07
*/
public static boolean isAllChinese(String str){
if(str!=""){
char[] c=str.toCharArray();
for (int i = 0; i < c.length; i++) {
Character.UnicodeBlock ub = Character.UnicodeBlock.of(c[i]);
if (ub != Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
&& ub != Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
&& ub != Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
&& ub != Character.UnicodeBlock.GENERAL_PUNCTUATION
&& ub != Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
&& ub != Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
return false;
}
}
return true;
}else{
return false;
}
}
/**
* 判断第一个字符窜中包含第二个字符串的数量
* @author liuqixiang
* @param 参数1:待判断字符串;参数2:包含的字符串
* @return int
* @version 1.0 2018-09-07
*/
public static int hasStrCount(String str1, String str2) {
int sum = 0;
if(StringUtils.isNull(str2)){
return 0;
}
while (str1.indexOf(str2) != -1) {
sum++;
str1 = str1.substring(str1.indexOf(str2) + str2.length());
}
return sum;
}
/**
* 将一个String[]中的某个字符串移到数组的末尾
* @author liuqixiang
* @param 参数1:待操作字符串数组;参数2:待移动的字符串
* @return String[]
* @version 1.0 2018-09-07
*/
public static String[] moveToEnd(String[] sources, String str) {
int head = 0;
int end = sources.length - 1;
while (head != end) {
while (head != end) {
if (sources[head].equals(str))
break;
head++;
}
while (head != end) {
if (!sources[end].equals(str))
break;
end--;
}
if (head != end) {
String temp = sources[head];
sources[head] = sources[end];
sources[end] = temp;
}
}
return sources;
}
/**
* 删除String[]中的某个字符串
* @author liuqixiang
* @param 参数1:待操作字符串数组;参数2:待删除的字符串
* @return String[]
* @version 1.0 2018-09-07
*/
public static String[] delstr(String[] sources, String str) {
sources = moveToEnd(sources, str);
int size = 0;
for (; size < sources.length; size++) {
if (sources[size].equals(str))
break;
}
String[] temp = new String[size];
for (int i = 0; i < size; i++)
temp[i] = sources[i];
return temp;
}
/**
* 将String[]转化为int[]
* @author liuqixiang
* @param 参数1:待操作的字符串数组
* @return int[]
* @version 1.0 2018-09-07
*/
public static int[] pareInts(String[] sources) {
int[] temp = new int[sources.length];
for (int i = 0; i < sources.length; i++) {
temp[i] = Integer.parseInt(sources[i]);
}
return temp;
}
/**
* 将int[]转化为String[]
* @author liuqixiang
* @param 参数1:待操作的字符串数组
* @return int[]
* @version 1.0 2018-09-07
*/
public static String[] pareStrings(int[] sources) {
String[] temp = new String[sources.length];
for (int i = 0; i < sources.length; i++) {
temp[i] = sources[i]+"";
}
return temp;
}
/**
* 获取第二个字符串在第一个字符串中出现位置的索引值
* @param str1
* @param str2
* @return List
*/
public static List indexOf(String str1,String str2){
int len=str1.length();
int dd=0;
List list=new ArrayList();
int count=hasStrCount(str1, str2);
for (int i = 0; i <count; i++) {
int index=str1.indexOf(str2)+dd;
list.add(index);
str1=str1.substring(str1.indexOf(str2)+1);
dd=len-str1.length();
}
return list;
}
/**
* 截取字符窜到指定字符窜,例如截取"qwertyuio"到'e'字符,结果为qwe
* @author liuqixiang
* @param 参数1:待截取的字符串;参数2:截取位置;参数3:位置序号;参数4:是否包含截取位置
* @return String
* @version 1.0 2018-09-07
*/
public static String subString(String str1, String str2,int sqe,int type) {
String restr="";
List list=indexOf(str1, str2);
int xhsize=0;
if(list.size()<sqe||sqe<1){
return "";
}else{
xhsize=sqe;
}
restr=str1.substring(0, (Integer)list.get(xhsize-1));
if(type==1){
restr+=str2;
}
return restr;
}
/**
*去除字符窜多余的空格
* @author liuqixiang
* @param 参数1:待处理的字符串;参数2:处理类型,1表示去除左边的空格,2表示
* 去除右边的空格,3表示去除两边的空格,4表示去除所有空格
* @return String
* @version 1.0 2018-09-07
*/
public static String delNull(String str,String type) {
if(type.equals("1")){
return delLeftNull(str);
}else if(type.equals("2")){
return delRightNull(str);
}else if(type.equals("3")){
return str.trim();
}else{
return str.replaceAll(" ", "");
}
}
/**
*将int型转换为指定长度的字符串,不够位数前面添零
* @author liuqixiang
* @param 参数1:待处理的数字;参数2:位数
* @return String
* @version 1.0 2018-09-07
*/
public static String toString(int value, int median) {
String result = "";
String valueString = String.valueOf(value);
int valueMedian = valueString.length();
if(valueMedian < median) {
for(int i = 0, c = median - valueMedian; i < c; i++) {
result = result + "0";
}
result = result + valueString;
} else {
result = valueString;
}
return result;
}
/**
*判断字符窜数组中是否包含指定字符串
* @author liuqixiang
* @param 参数1:待操作的字符串数组;参数2:包含的字符串;参数3:是否大小写敏感
* @return boolean
* @version 1.0 2018-09-07
*/
public static boolean isContain(String[] strings, String string,
boolean caseSensitive) {
for (int i = 0; i < strings.length; i++) {
if (caseSensitive == true) {
if (strings[i].equals(string)) {
return true;
}
}
else {
if (strings[i].equalsIgnoreCase(string)) {
return true;
}
}
}
return false;
}
/**
*将字符串数组使用指定的分隔符合并成一个字符串。
* @author liuqixiang
* @param 参数1:待操作的字符串数组;参数2:表示分隔符,为null的时候使用""作为分隔符(即没有分隔符)
* @return String
* @version 1.0 2018-09-07
*/
public static String toString(String[] array, String delim) {
int length = array.length - 1;
if (delim == null) {
delim = "";
}
StringBuffer result = new StringBuffer(length * 8);
for (int i = 0; i < length; i++) {
result.append(array[i]);
result.append(delim);
}
result.append(array[length]);
return result.toString();
}
/**
*替换String中所有的指定字符串为指定的新字符窜
* @author liuqixiang
* @param 参数1:待操作的字符串;参数2:需替换的字符窜;参数3:用作替换的新字符窜
* @return String
* @version 1.0 2018-09-07
*/
public static String replaceAll(String str0,String str1,String str2)
{
if(str0==null || str0.equals("")) return str0;
if(str1==null || str1.equals("")) str1=" ";
String s="";
try
{
while(str0.indexOf(str1)!=-1)
{
s+=str0.substring(0,str0.indexOf(str1))+str2;
str2=str2.trim();
str0=str0.substring(str0.indexOf(str1)+str1.length());
}
s+=str0;
}catch(Exception e)
{
e.printStackTrace();
}
if(s.equals(""))
s=str0;
return s;
}
/**
* 验证字符窜是否为ip格式
* @author liuqixiang
* @param 参数1:待验证的字符串;
* @return boolean
* @version 1.0 2018-09-07
*/
public static boolean isIp(String strIp){
boolean bln=true;
String[] str=strIp.split("\\.");
String s=toString(str, "");
if(isAllNumber(s)){
try {
StringTokenizer st = new StringTokenizer(strIp,".");
int intCount=st.countTokens();
while (st.hasMoreTokens()) {
String strTemp=st.nextToken();
try {
int intTemp = Integer.parseInt(strTemp);
if (intTemp > 255 || intTemp < 0) {
bln = false;
}
}
catch (NumberFormatException ex) {
ex.printStackTrace();
bln = false;
}
}
if(intCount!=4) bln = false;
}
catch (Exception ex) {
ex.printStackTrace();
}
return bln;
}else{
return false;
}
}
/**
*验证字符窜是否为URL格式
* @author liuqixiang
* @param 参数1:待验证的字符串;
* @return boolean
* @version 1.0 2018-09-07
*/
public static boolean isUrl(String strUrl){
try {
URL test = new URL(strUrl);
return true;
} catch (MalformedURLException mue) {
return false;
}
}
/**
*去除字符窜左边多余的空格
* @author liuqixiang
* @param String
* @return String
* @version 1.0 2018-09-07
*/
public static String delLeftNull(String str) {
char[] c = str.toCharArray();
for (int i = 0; i < c.length; i++) {
if (c[i] != ' ') {
str = String.valueOf(c, i, c.length - i);
break;
}
}
return str;
}
/**
*去除字符窜右边多余的空格
* @author liuqixiang
* @param String
* @return String
* @version 1.0 2018-09-07
*/
public static String delRightNull(String value) {
String result = value;
if(result == null) return result;
char ch[] = result.toCharArray();
int endIndex = -1;
for(int i=ch.length-1; i > -1; i--) {
if(Character.isWhitespace(ch[i])) {
endIndex = i;
}
else {
break;
}
}
if(endIndex != -1) {
result = result.substring(0, endIndex);
}
return result;
}
/**
* 字符串大小写转换
* @param str
* @param type
* @return
*/
public static String shift(String str,int type){
if(type==1){
str=toBigString(str);
}else if(type==2){
str=toSmallString(str);
}else{
str=shiftBigOrSmall(str);
}
return str;
}
/**
* 字母大小写互转
* @param str
* @return
*/
public static String shiftBigOrSmall(String str) {
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);
}
/**
* 将字符转换为大写字符串
* @param str
* @return
*/
public static String toBigString(String str){
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);
}
}
return new String(chs);
}
/**
* 将字符转换为小写字符串
* @param str
* @return
*/
public static String toSmallString(String str){
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);
}
}
return new String(chs);
}
/**
* 判断字符串是否为空 为空返回true
* @param str
* @return
*/
public static boolean isNull(String str){
if(str==null||"null".equals(str)||"NULL".equals(str)){
return true;
}else{
str=delNull(str, "4");
if("".equals(str)){
return true;
}else{
return false;
}
}
}
public static String toNotNullStr(Object str){
return str==null?"":str.toString();
}
public static String strToNull(String str){
return "".equals(str)?null:str;
}
/**
* 获取字符串的字节长度
* @param str
* @return
*/
public static int getByteLength(String str){
if(!isNull(str)){
String str2=str.replaceAll("[^\\x00-\\xff]","**");
int len=str2.length();
return len;
}else{
return 0;
}
}
/**
* 对字符串数组判断是否越界
* @param str
* @return
*/
public static String getArrayValue (String[] StrArr,int index){
if (StrArr==null) return "";
int len = StrArr.length;
if(index<len)return StrArr[index];
return "";
}
/**
* 数字转换为字符串,当为0时返回空
* @param str
* @return
*/
public static String tranNumToString (int num){
String returnStr ="";
returnStr=toNotNullStr(num);
return ("0".equals(returnStr))?returnStr="":returnStr;
}
public static String toLong(String str, int len){
if(isNull(str)){
str="";
}
int ln=str.getBytes().length;
int bl=(len-ln)/2;
for (int i = 0; i <bl; i++) {
str=" "+str;
}
return str;
}
/**
* 制定长度插入间隔符
* @param str1 原字符串
* @param str2 间隔符
* @param n 指定长度
* @return
*/
public static String insertStr(String str1,String str2,int n){
String restr="";
int len=str1.length();
int foe=len/n;
for (int i = 0; i <foe; i++) {
int end=i*n+n;
restr+=str1.substring(i*n, end)+str2;
}
restr+=str1.substring(foe*n, len);
return restr;
}
/**
* 往右补空格到指定长度
* @param str
* @param n
* @return
*/
public static String bkg_right(String str,int n){
String restr="";
int nulllen=0;
if(!isNull(str)){
restr=str;
int len=str.length();
nulllen=n-len;
}else{
nulllen=n;
}
for (int i = 0; i < nulllen; i++) {
restr+=" ";
}
return restr;
}
/**
* 转化案号显示方式
* @param ah
* @return
*/
public static String[] doAh(String ah){
String[] str=new String[7];
if(!isNull(ah)){
int zf1=ah.indexOf("(");
int zf2=ah.indexOf(")");
if(zf1==-1){
zf1=ah.indexOf("(");
}
if(zf2==-1){
zf2=ah.indexOf(")");
}
int zf3=ah.indexOf("法");
int zf4=ah.indexOf("字");
int zf5=ah.indexOf("第");
int zf6=ah.indexOf("号");
if(zf1!=-1&&zf2!=-1&&zf3!=-1&&zf4!=-1&&zf5!=-1&&zf6!=-1){
if(zf6>zf5&&zf5>zf4&&zf4>zf3&&zf3>zf2&&zf2>zf1){
str[0]=ah.substring(0, zf1+1);
str[1]=ah.substring(zf1+1, zf2);
str[2]=ah.substring(zf2, zf3+1);
str[3]=ah.substring(zf3+1, zf4);
str[4]=ah.substring(zf4, zf5+1);
str[5]=ah.substring(zf5+1, zf6);
str[6]=ah.substring(zf6, zf6+1);
}
}
}
if(str[0]==null){
str[0]=ah;
}
return str;
}
/**
* 补零
* @param str
* @return
*/
public static String bl(String str,int length){
int len=str.length();
if(len<length){
for (int i = 0; i <length-len; i++) {
str="0"+str;
}
}
return str;
}
/**
* @param list eg:1,2,3,5,6,7,10,11(正数)
* @return 1-3、5-7、10-11
* */
public static String getSerialNumberString(List list){
String result = "";
if(list==null || list.size()==0){
return "";
}
int lastNum=-1;
int currentNum;
int step = 0;
for(int i=0;i<list.size();i++){
String str = list.get(i).toString();
currentNum = Integer.parseInt(str);
if(i==0){
result = str;
}else {
if(!((lastNum+1)==currentNum)){
if(step==0){
result += "、" + currentNum;
}else{
result += "-" + lastNum + "、" + currentNum;
}
step = 0;
//result += "-" + lastNum + "、" + currentNum;
}else{
// if(i==list.size()-1){
// result += "-"+currentNum;
// }
step++;
if(i==list.size()-1&&lastNum!=-1){
result += "-"+currentNum;
}
}
}
lastNum = currentNum;
}
return result;
}
public static void main(String[] args) {
/* String str="2011/11/30";
System.out.println(str.replace("/", "-"));*/
List list = new ArrayList(){};
list.add(1);
list.add(2);
list.add(3);
list.add(5);
list.add(6);
list.add(10);
list.add(11);
list.add(12);
list.add(15);
// StringUtils su = new StringUtils();
// String result = su.getSerialNumberString(list);
// System.out.println(result);
}
}