zoukankan      html  css  js  c++  java
  • 【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 }
  • 相关阅读:
    高级特性(4)- 数据库编程
    UVA Jin Ge Jin Qu hao 12563
    UVA 116 Unidirectional TSP
    HDU 2224 The shortest path
    poj 2677 Tour
    【算法学习】双调欧几里得旅行商问题(动态规划)
    南洋理工大学 ACM 在线评测系统 矩形嵌套
    UVA The Tower of Babylon
    uva A Spy in the Metro(洛谷 P2583 地铁间谍)
    洛谷 P1095 守望者的逃离
  • 原文地址:https://www.cnblogs.com/utank/p/7877755.html
Copyright © 2011-2022 走看看