• 【Java】字符串工具类


      1 import android.annotation.SuppressLint;
      2 
      3 import java.io.UnsupportedEncodingException;
      4 import java.util.ArrayList;
      5 import java.util.List;
      6 import java.util.regex.Matcher;
      7 import java.util.regex.Pattern;
      8 
      9 public class StringUtils {
     10     
     11     /**
     12      * 判断ip合法性
     13      */
     14     @SuppressLint("NewApi")
     15     public static boolean isMacthIp(String ip) {
     16         if (ip != null && !ip.isEmpty()) {
     17             // 定义正则表达式            
     18             String regex = "^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\."
     19                     + "(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\."
     20                     + "(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\."
     21                     + "(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$"; // 判断ip地址是否与正则表达式匹配            
     22             if (ip.matches(regex)) {           
     23                 return true;            
     24             }
     25         }    
     26         return false;    
     27     }
     28     
     29     /**
     30      * 判断字符串是否为空
     31      */
     32     public static boolean isEmpty(String str){
     33         if (str==null || "".equals(str)){
     34             return true;
     35         }
     36         return false;
     37     }
     38 
     39     /**
     40      * 判断字符串是否为空(包括对"null")
     41      */
     42     public static boolean isNullOrEmpty(String str){
     43         if (str==null || "".equals(str) || "null".equals(str) ){
     44             return true;
     45         }
     46         return false;
     47     }
     48 
     49     
     50     /**
     51      * 判断字符串是否纯数字
     52      */
     53     public static boolean isDigital(String str){
     54         if (!isEmpty(str))
     55             return str.matches("[0-9]+");
     56         return false;
     57     }
     58     
     59     /**
     60      * 计算含有中文的字符串长度
     61      * @param value 字符串(支持含中文字符串)
     62      * @return
     63      */
     64     public static int length(String value) {
     65         int valueLength = 0;
     66         String chinese = "[u0391-uFFE5]";
     67         /* 获取字段值的长度,如果含中文字符,则每个中文字符长度为2,否则为1 */
     68         for (int i = 0; i < value.length(); i++) {
     69             /* 获取一个字符 */
     70             String temp = value.substring(i, i + 1);
     71             /* 判断是否为中文字符 */
     72             if (temp.matches(chinese)) {
     73                 /* 中文字符长度为2 */
     74                 valueLength += 2;
     75             } else {
     76                 /* 其他字符长度为1 */
     77                 valueLength += 1;
     78             }
     79         }
     80         return valueLength;
     81     }
     82     
     83     /**
     84      * 字符串数组转换List<String>
     85      * @param items
     86      * @return
     87      */
     88     public static List<String> stringsToList(String[] items) {
     89         List<String> lists = new ArrayList<String>();
     90         for(int i=0; i<items.length; i++){
     91             lists.add(items[i]);
     92         }
     93         return lists;
     94     }
     95 
     96     /**
     97      * 字符串填充,将sour使用fillStr前补或后补满len长度
     98      * @param sour 待填充字符串,支持含有中文
     99      * @param fillStr 填充数据
    100       * @param len 填充完整字符串长度
    101      * @param isLeft 是否左补填充数据,否则右补填充数据
    102      * @return
    103      */
    104     public static String fill(String sour, String fillStr, int len, boolean isLeft){
    105         if (sour == null) {
    106             sour = "";
    107         }
    108         int fillLen = len - length(sour);
    109         String fill = "";
    110         for (int i=0; i<fillLen; i++) {
    111             fill = fill + fillStr;
    112         }
    113         if (isLeft) {
    114             return fill + sour;
    115         } else {
    116             return sour + fill;
    117         }
    118     }
    119     
    120     /**
    121      * 字符串填充,中间填充
    122      * @param sour 左侧待填充字符串,支持含有中文
    123      * @param space 填充的数据,一般为* 、空格、——
    124      * @param lengh 填充完整字符串长度
    125      * @param modelparams 右侧待填充字符串,支持含有中文
    126      * @return
    127      */
    128     public static String fillMiddle(String sour, String space, int lengh, String modelparams){
    129         String s, ss = null;
    130         int lenS = sour.length();
    131         int lenM = modelparams.length();
    132         //做非空处理
    133         if(sour == null) {
    134             sour = "";
    135         }
    136         if(modelparams == null) {
    137             modelparams = "";
    138         }
    139         if (space == "") {
    140             space = " "; 
    141         }
    142         //若输入为汉字,则长度取2倍
    143         if (sour.matches("[u4e00-u9fa5]+")) {
    144             lenS = lenS*2;
    145         }
    146         if (modelparams.matches("[u4e00-u9fa5]+")) {
    147             lenM = lenM*2;
    148         }
    149         //若输入有数字则,总长度加3
    150         if (sour.matches("[0-9]") && modelparams.matches("[0-9]")) {
    151             lengh = lengh + 4;
    152         }
    153         //长度保护
    154         if (lengh < (lenS + lenM)) {
    155             new Exception("哥们,长度设置太小了");
    156         }
    157         
    158         s = fill(modelparams, space, lengh - lenS-lenM, true);
    159         ss = sour + s +"
    ";
    160         
    161         return ss;
    162     }
    163     
    164     
    165     /**
    166      * 字符串填充
    167      * 
    168      * @param strData 待填充字符串,不支持含有中文
    169      * @param nLen
    170      * @param
    171      * @param nOption
    172      *            0:左侧填充; 1:右侧填充; 2:两边填充
    173      * @return
    174      */
    175     public static String paddingString(String strData, int nLen, String subStr,
    176                                        int nOption) {
    177         int i, addCharLen;
    178 
    179         String strHead = "";
    180         String strEnd = "";
    181 
    182         i = strData.length();
    183         if (i >= nLen) {
    184             return strData;
    185         }
    186 
    187         switch (nOption) {
    188         case 0:
    189             addCharLen = (nLen - i) / subStr.length();
    190             for (i = 0; i < addCharLen; i++) {
    191                 strHead += subStr;
    192             }
    193             return strHead + strData;
    194         case 1:
    195             addCharLen = (nLen - i) / subStr.length();
    196             for (i = 0; i < addCharLen; i++) {
    197                 strEnd += subStr;
    198             }
    199             return strData + strEnd;
    200         case 2:
    201             addCharLen = (nLen - i) / (subStr.length() * 2);
    202             for (i = 0; i < addCharLen; i++) {
    203                 strHead += subStr;
    204                 strEnd += subStr;
    205             }
    206             return strHead + strData + strEnd;
    207         default:
    208             return strData;
    209         }
    210     }
    211 
    212     /**
    213      * 整形转换成BCD型的字符串
    214      * 9转换成后将变成09,00 09
    215      * 19转换后将变成19, 00 19
    216      * @param value
    217      * @param bytesNum
    218      *            BCD字节个数
    219      * @return
    220      */
    221     public static String intToBcd(int value, int bytesNum) {
    222         switch(bytesNum){
    223         case 1:
    224             if (value >= 0  && value <= 99){
    225                 return paddingString(String.valueOf(value),2,"0",0);
    226             }
    227             break;
    228         case 2:
    229             if (value >= 0  && value <= 999) {
    230                 return paddingString(String.valueOf(value),4,"0",0);
    231             }
    232             break;
    233             
    234         case 3:
    235             if (value >= 0  && value <= 999) {
    236                 return paddingString(String.valueOf(value),3,"0",0);
    237             }
    238             break;
    239         }
    240         
    241         return "";
    242     }
    243 
    244     /**
    245      * Hex数据转换成字符串
    246      * 
    247      * @param value
    248      * @return
    249      * @throws UnsupportedEncodingException
    250      */
    251     public static String hexToStr(String value) throws UnsupportedEncodingException {
    252         return new String(BytesUtils.hexToBytes(value),"GBK");
    253     }
    254     /**
    255      * Hex数据转换成字符串
    256      * encoding 为编码
    257      * @param value 
    258      * @return
    259      * @throws UnsupportedEncodingException
    260      */
    261     public static String hexToStr(String value, String encoding) throws UnsupportedEncodingException {
    262         return new String(BytesUtils.hexToBytes(value),encoding);
    263     }
    264 
    265     /**
    266      * 字符串转换成Hex
    267      * 
    268      * @param value
    269      * @return
    270      */
    271     public static String strToHex(String value) {
    272         return BytesUtils.bytesToHex(BytesUtils.getBytes(value));
    273     }
    274 
    275     /**
    276      * 往value中填充一个字符0 ,当数据长度正好为2的整数倍时,不填充
    277      * 
    278      * @param value
    279      * @param option
    280      *            0:往后填充 ;1:往前填充
    281      * @return
    282      */
    283     public static String paddingZeroToHexStr(String value, int option) {
    284         
    285         if (value.length() % 2 == 0){
    286             return value;
    287         }
    288         
    289         if (option == 0){
    290             return "0" + value;
    291         }
    292         else if (option == 1){
    293             return value + "0";
    294         }
    295         else{
    296             return value;
    297         }
    298     }
    299 
    300     /**
    301      * 判断是否是Hex格式数据
    302      * 
    303      * @param value
    304      * @return
    305      */
    306     public static boolean checkHexStr(String value) {
    307         int i;
    308         int len;
    309         
    310         if (value == null) return false;
    311         
    312         len = value.length();
    313         if (len == 0) return false;
    314 
    315       for (i= 0;i<len;i++){
    316           if (!((value.charAt(i) >= '0' && value.charAt(i) <= '9')|| 
    317                   (value.charAt(i) >= 'a' && value.charAt(i) <= 'f') ||
    318                   (value.charAt(i) >= 'A' && value.charAt(i) <= 'F'))){
    319               return false;               
    320           }
    321       }
    322       return true;
    323     }
    324 
    325     /**
    326      * 判断字符串是否是数字0-9
    327      * 
    328      * @param value
    329      * @return
    330      */
    331 /*    public static boolean checkDigitStr(String value) {
    332         int i;
    333         int len;
    334         
    335         if (value == null) return false;
    336         
    337         len = value.length();
    338         if (len == 0) return false;
    339 
    340       for (i= 0;i<len;i++){
    341           if (value.charAt(i) < '0' || value.charAt(i) > '9') {
    342               return false;               
    343           }
    344       }
    345       return true;
    346     }*/
    347     
    348     /**
    349      * Binary数据转换成Hex
    350      * 
    351      * @param value
    352      * @return
    353      */
    354     public static String binaryToHex(String value) {
    355         int i,j,len;
    356         String result ="";
    357         char[] hexVocable = { '0', '1', '2', '3', 
    358                 '4', '5', '6','7', 
    359                 '8', '9', 'A', 'B', 
    360                 'C', 'D', 'E', 'F' };
    361         String[] binString  = {"0000", "0001", "0010", "0011",
    362                 "0100", "0101", "0110", "0111",
    363                 "1000", "1001", "1010", "1011",
    364                 "1100", "1101", "1110", "1111"};
    365         //System.out.println("value: " + value);
    366         
    367         len = value.length();
    368         for(i=0; i<len; i += 4){
    369             for(j=0; j<16; j++){
    370                 if(binString[j].equals(value.substring(i, i+4))){
    371                     result += hexVocable[j];
    372                     break;
    373                 }                
    374             }
    375         }
    376         //System.out.println("result: " + result);
    377         return result;
    378     }
    379 
    380     /**
    381      * Hex数据转换成Binary
    382      * 
    383      * @param value
    384      * @return
    385      */
    386     public static String hexToBinary(String value) {
    387         int i,j,len;
    388         String result ="";
    389         char[] hexVocable = { '0', '1', '2', '3', 
    390                 '4', '5', '6','7', 
    391                 '8', '9', 'A', 'B', 
    392                 'C', 'D', 'E', 'F' };
    393         String[] binString  = {"0000", "0001", "0010", "0011",
    394                 "0100", "0101", "0110", "0111",
    395                 "1000", "1001", "1010", "1011",
    396                 "1100", "1101", "1110", "1111"};
    397         
    398         len = value.length();
    399         for(i=0; i<len; i++){
    400             for(j=0; j<16; j++){
    401                 if(value.charAt(i) == hexVocable[j]){
    402                     result += binString[j];
    403                     break;
    404                 }                
    405             }
    406         }
    407         //System.out.println("result: " + result);
    408         return result;
    409     }
    410     
    411     /**
    412      * 获取二进制字符串
    413      * 0x00 0x01 0x00 0x01 0x01转换成"01011"
    414      * @param value
    415      * @return
    416      */
    417     public static String getBinaryString(byte[] value) {
    418         int len;
    419         String result ="";
    420         
    421         len = value.length;
    422         
    423         for(int i=0;i<len;i++) {
    424             result += String.valueOf(value[i]);
    425         }
    426         
    427         return result;
    428     }
    429     /**
    430      * mmdd日期格式
    431      * @param date
    432      * @return
    433      */
    434     public static boolean isMatchDate(String date){
    435         if(date.length()!=4||date==null){
    436             return false;
    437         }
    438         String eL="(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-9])))";
    439            Pattern p = Pattern.compile(eL);
    440             Matcher m = p.matcher(date);
    441             boolean b = m.matches();   
    442             return b;
    443     }
    444     
    445     /**
    446      * 删除字符串左侧所有字符ch
    447      * @param
    448      * @return
    449      */
    450     public static String deleteLeftChar(String data, char ch){
    451         int flag = 0;
    452         for(int i = 0;i<data.length();i++){
    453             if(data.charAt(i) == ch){
    454                 flag = i;
    455             }else{
    456                 break;
    457             }
    458         }
    459         flag = flag+1;
    460         data = data.substring(flag);
    461         return data;
    462     }
    463     
    464     /**
    465      * 删除字符串右侧所有字符ch
    466      * @param
    467      * @return
    468      */
    469     public static String deleteRightChar(String data, char ch){
    470         
    471         int flag = data.length();
    472         for(int i = data.length()-1;i>=0;i--){
    473             if(data.charAt(i) == ch){
    474                 flag = i;
    475             }else{
    476                 break;
    477             }
    478         }
    479 
    480         data = data.substring(0,flag);
    481         return data;
    482     }
    483     
    484     
    485         /**
    486      * 将显示金额的字符串(带原点),转化为没有原点的字符串
    487      * 
    488      * 示例:123.32 --->  12332
    489      *       2.  ----> 200
    490      *       2.3  ----> 230
    491      *       0.12 --->  12
    492      *       0.02 --->   2
    493      * @param str
    494      * @return
    495      */
    496     public static String decimalWipeDot(String str){
    497         
    498         //拿到字符串
    499         if (str.contains(".")) {
    500             
    501             //判断点后还有几位
    502             int indexOf = str.indexOf(".");
    503             //用索引和长度进行判断
    504             int length = str.length();
    505             int cha = length - indexOf; 
    506             char charAt = str.charAt(indexOf - 1);
    507 
    508             switch (cha) {
    509             case 1:
    510                 //小数后有0位--先去掉点,在加个00   eg: 2. --> 200   0.-->0
    511                 if (charAt == '0') {
    512                     str= "0";
    513                 }else {
    514                     str = str.replace(".", "");
    515                     str= str+"00";
    516                 }
    517                 break;
    518             case 2:
    519                 //小数后有1位--先去掉点,在加个0  eg: 2.3 -->  230  0.1 -->10
    520                 if (charAt == '0') {
    521                     str= str.charAt(indexOf + 1)+"0";
    522                 }else {
    523                     str = str.replace(".", "");
    524                     str= str+"0";
    525                 }
    526                 
    527                 break;
    528             case 3:
    529                 //小数后有2位--直接去掉点   eg:   2.03 --> 203   0.12-->12  0.02 --> 2
    530                 char charAt2 = str.charAt(indexOf + 1);
    531                 if (str.length() == 4) {
    532                     
    533                     if (charAt == '0') {
    534                         if (charAt2 == '0') {
    535                             str= str.substring(length - 1,length);
    536                         }else {
    537                             
    538                             str= str.substring(indexOf + 1,length);
    539                         }
    540                     }else {
    541                         str = str.replace(".", "");
    542                     }
    543                 }else {
    544                     str = str.replace(".", "");
    545                 }
    546                 
    547                 break;
    548             default:
    549                 break;
    550             }
    551         }else {
    552             //没有点, 直接加00  eg:  23 ---> 2300   0--->0   0000023--->  2300    00000--->0
    553             //去掉前面多余的0 ,在判断这个数是否为0
    554             if (str.equals("")) {
    555                 str = "0";
    556             }
    557             int int1 = Integer.parseInt(str);
    558             str = String.valueOf(int1);
    559             
    560             if (int1 != 0){
    561                 str = str+"00";
    562             }else {
    563                 str = "0";
    564             }
    565         }
    566         return str;
    567     }
    568     
    569     /**
    570      * 将金额的字符串(不带点)  转化为带点的金额字符串
    571      * 示例       12332 ---> 123.32
    572      *       200   --->  2
    573      *       230   ----> 2.3 
    574      *        12 ---> 0.12 
    575      *         2  ---> 0.02
    576      * 
    577      * 
    578      * @param str
    579      * @return
    580      */
    581     public static String decimalAddDot(String str){
    582         boolean isNegative = false;
    583         str = str.replace(" ","");
    584 
    585         if (str == null || str == "") {
    586             return "0.00";
    587         }
    588         //截取字符第一个字符
    589          String sign = str.substring(0,1);
    590         if (sign.equals("-")) {
    591             isNegative = true;//标记为负数
    592             str = str.substring(1,str.length());
    593         }else{
    594             //正数不作处理
    595         }
    596 
    597         int length = str.length();
    598         if (length >= 3) {  //200-->2.00
    599             str = str.substring(0, length-2)+"."+str.substring(length-2, length);
    600         }else {
    601             switch (length) {
    602             case 2:// 20-->0.20   23 --> 0.23
    603                 str = "0."+str;
    604                 break;
    605             case 1://  2-->0.02   
    606                 str = "0.0"+str;
    607                 break;
    608             case 0:
    609                 //说明没有    0.00
    610                 str = "0.00";
    611                 break;
    612             default:
    613                 break;
    614             }
    615         }
    616 
    617         if (isNegative) {
    618             return "-"+str;
    619         }else{
    620             return str;
    621         }
    622 
    623     
    624         
    625     }
    626 }
  • 相关阅读:
    npm安装elasticsearch-reindex
    Linux14_文本编辑器与终端配置
    Linux13_群组的管理和文件权限的管理
    Linux12_用户和权限
    Linux11_文件及目录以及其相关的组织命令
    Linux10_常用命令和操作
    Linux9_安装Linux系统
    基础概念——什么是POSIX
    C++Review21_宏和常量
    C++Review20_C++函数高级特性(重载、内联、const和virtual)
  • 原文地址:https://www.cnblogs.com/utank/p/7877755.html
Copyright © 2020-2023  润新知