java长字符串变短串工具类

package net.zkbc.p2p.util;

import java.util.UUID;

import com.zkbc.core.util.MD5;

/**
 * ① 将长字符串用md5算法生成32位签名串,分为4段,,每段8个字符;<br />
 * 
 * ② 对这4段循环处理,取每段的8个字符, 将他看成16进制字符串与0x3fffffff(30位1)的位与操作,超过30位的忽略处理;<br />
 * 
 * ③ 将每段得到的这30位又分成6段,每5位的数字作为字母表的索引取得特定字符,依次进行获得6位字符串;<br />
 * 
 * ④ 这样一个md5字符串可以获得4个6位串,取24位字符的前12位。<br />
 * 
 * @author zsj
 *
 */
public class ShortTextUtil {
	public static void main(String[] args) {
		String uuid = UUID.randomUUID().toString();
		System.out.println(get12Char(uuid));
	}

	/**
	 * 获取短字符
	 * 
	 * @param uuid
	 * @return 大写
	 */
	public static String get12Char(String uuid) {
		String arr[] = ShortText(uuid);
		String rst = (arr[0] + arr[1]).toUpperCase();
		return rst.substring(0, 4) + "-" + rst.substring(4, 8) + "-"
				+ rst.substring(8, 12);
	}

	private static String[] ShortText(String string) {
		String key = "XuLiang"; // 自定义生成MD5加密字符串前的混合KEY
		String[] chars = new String[] { // 要使用生成URL的字符
		"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n",
				"o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
				"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B",
				"C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N",
				"O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };

		String hex = MD5.encodeByMd5AndSalt(key + string);
		int hexLen = hex.length();
		int subHexLen = hexLen / 8;
		String[] ShortStr = new String[4];

		for (int i = 0; i < subHexLen; i++) {
			String outChars = "";
			int j = i + 1;
			String subHex = hex.substring(i * 8, j * 8);
			long idx = Long.valueOf("3FFFFFFF", 16) & Long.valueOf(subHex, 16);

			for (int k = 0; k < 6; k++) {
				int index = (int) (Long.valueOf("0000003D", 16) & idx);
				outChars += chars[index];
				idx = idx >> 5;
			}
			ShortStr[i] = outChars;
		}

		return ShortStr;
	}
}

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Java中,可以使用压缩算法对字符串进行压缩以减少其度。常见的压缩算法包括Gzip、Deflate和Bzip2等。通过对字符串进行压缩,可以减少字符串占用的内存空间,并在网络传输或存储时节省带宽和存储空间。压缩字符串的方法可以是通过统计连续出现的相同字符的次数来实现。首先,定义两个指针i和j,其中i指向字符串的首个字符,j向前遍历直到访问到不同的字符时停止。此时,j - i便是首个字符的连续出现次数。然后,从下个字符开始,重复以上操作,直到遍历完成。最后,将字符以及出现的次数添加到新的字符串对象中。将压缩后的字符串与原始字符串进行比较,返回度较的那个。在Java中,可以使用StringBuilder来创建新的字符串对象,使用charAt()方法获取字符串中的字符,通过append()方法将字符和出现次数添加到新的字符串中。最终,通过调用toString()方法将StringBuilder对象转换为字符串。例如: ```java public String compressString(String S) { int i = 0, j = 0, ls = S.length(); StringBuilder res = new StringBuilder(); while (i < ls) { while (j < ls && S.charAt(i) == S.charAt(j)) { j++; } res.append(S.charAt(i)).append(j - i); i = j; } return res.length() < ls ? res.toString() : S; } ``` 以上是一个示例代码,可以通过调用compressString()方法来对字符串进行压缩。其中,参数S是待压缩的字符串,返回值是压缩后的字符串。在这个示例中,我们使用Gzip压缩算法对字符串进行压缩,得到压缩后的字节数组。然后,我们输出压缩前后的字符串度,以便比较压缩效果。最后,我们使用Gzip压缩算法对压缩后的字节数组进行解压缩,得到解压缩后的字符串,并检查解压缩后的字符串是否与原始字符串一致。通过对字符串进行压缩,可以将字符串。<span class="em">1</span><span class="em">2</span><span class="em">3</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值