| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- package com.template.common.utils;
- import java.text.ParseException;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.List;
- import java.util.UUID;
- /**
- * @Author: binguo
- * @Date: 2023/7/25 星期二 14:20
- * @Description: com.repair.common.utils
- * @Version: 1.0
- */
- public class StrUtils {
- public static String getRandomName(String fileName){
- int index=fileName.lastIndexOf(".");
- String houzhui=fileName.substring(index);//获取后缀名
- String uuidFileName=UUID.randomUUID().toString().replace("-","")+houzhui;
- return uuidFileName;
- }
- /**
- * 采用URL Base64字符,即把“+/”换成“-_”
- */
- static private char[] alphabet = "01234567899876543210012345678998765432100123456789987654321001234".toCharArray();//"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789xyz".toCharArray();
- /**
- * 获取指定位数的UUID
- * @param bits 指定位数
- * @return
- */
- public static String getUUIDBits(int bits) {
- UUID uuid = UUID.randomUUID();
- long msb = uuid.getMostSignificantBits();
- long lsb = uuid.getLeastSignificantBits();
- char[] out = new char[24];
- int tmp = 0, idx = 0;
- // 循环写法
- int bit = 0, bt1 = 8, bt2 = 8;
- int mask = 0x00, offsetm = 0, offsetl = 0;
- for(; bit < 16; bit += 3, idx += 4) {
- offsetm = 64 - (bit + 3) * 8;
- offsetl = 0;
- tmp = 0;
- if(bt1 > 3) {
- mask = (1 << 8 * 3) - 1;
- } else if(bt1 >= 0) {
- mask = (1 << 8 * bt1) - 1;
- bt2 -= 3 - bt1;
- } else {
- mask = (1 << 8 * ((bt2 > 3) ? 3 : bt2)) - 1;
- bt2 -= 3;
- }
- if(bt1 > 0) {
- bt1 -= 3;
- tmp = (int) ((offsetm < 0) ? msb : (msb >>> offsetm) & mask);
- if(bt1 < 0) {
- tmp <<= Math.abs(offsetm);
- mask = (1 << 8 * Math.abs(bt1)) - 1;
- }
- }
- if(offsetm < 0) {
- offsetl = 64 + offsetm;
- tmp |= ((offsetl < 0) ? lsb : (lsb >>> offsetl)) & mask;
- }
- if(bit == 15) {
- out[idx + 3] = alphabet[64];
- out[idx + 2] = alphabet[64];
- tmp <<= 4;
- } else {
- out[idx + 3] = alphabet[tmp & 0x3f];
- tmp >>= 6;
- out[idx + 2] = alphabet[tmp & 0x3f];
- tmp >>= 6;
- }
- out[idx + 1] = alphabet[tmp & 0x3f];
- tmp >>= 6;
- out[idx] = alphabet[tmp & 0x3f];
- }
- return new String(out, 0, bits);
- }
- public static void main(String[] args) throws ParseException
- {
- List<String> data = new ArrayList<>();
- for (int i = 0;i<10000000;i++){
- String sss = getUUIDBits(15);
- data.add(sss);
- }
- long allCount = data.size();
- long disCount = data.stream().distinct().count();
- Collections.sort(data);
- String sss ="";
- }
- }
|