字符串中的生僻字在传输和存储的过程中存在着各种各样的问题,为了便于传输和存储,我们通常会把这些生僻字转换为16进制编码进行传输和存储。

package com.dc.util;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.nio.charset.Charset;

import java.util.HashMap;

import java.util.Map;

/* ****************** 类说明 *********************

* class : RareWordUtil

* @author : ncc

* create time : 2017-12-20 上午09:49:54

* @version : 1.0

* description : 生僻字与16进制编码相互转化

* @see :

* ************************************************/

public class RareWordUtil {

private static Map nameToValue;

private static Map valueToName;

private String fileName = "gbk.txt";

private String fileEncoding = "GBK";

private final String preFix = "■△";

private static final RareWordUtil cr_instance = new RareWordUtil();

/**

* 构造方法

*/

private RareWordUtil() {

try {

init();

} catch (IOException e) {

System.out.println(e.getMessage());

}

}

/* ********************************************

* method name : getInstance

* description : 获取实例

* @return : RareWordUtil

* @param : @return

* modified : ncc , 2017-12-20

* @see :

* ********************************************/

public static RareWordUtil getInstance() {

return cr_instance;

}

/* ********************************************

* method name : init

* description : 初始化

* @return : void

* @param : @throws IOException

* modified : ncc , 2017-12-20

* @see :

* ********************************************/

@SuppressWarnings( { "static-access", "unchecked" })

private void init() throws IOException {

if (nameToValue != null && valueToName != null) {

return;

}

InputStream input = RareWordUtil.class.getResourceAsStream(fileName);

InputStreamReader inputsr = new InputStreamReader(input, Charset.forName(fileEncoding));

BufferedReader br = new BufferedReader(inputsr);

this.nameToValue = new HashMap();

this.valueToName = new HashMap();

String line = null;

while ((line = br.readLine()) != null) {

String ret = new String(line.getBytes(fileEncoding), fileEncoding);

String key = ret.substring(0, 1);

String value = ret.substring(line.length() - 4, line.length());

this.nameToValue.put(key, value);

this.valueToName.put(value, key);

}

}

/* ********************************************

* method name : getRareWord

* description : 将含16进制编码的字符串转化成含生僻字的字符串

* @return : String

* @param : @param value

* @param : @return

* modified : ncc , 2017-12-20

* @see :

* ********************************************/

@SuppressWarnings("static-access")

public String getRareWord(String value) {

StringBuffer sb = new StringBuffer();

int pos = -1;

while ((pos = value.indexOf(preFix)) != -1) {

sb.append(value.substring(0, pos));

String code = value.substring(pos + preFix.length(), pos + preFix.length() + 4);

String codeValue = this.valueToName.get(code);

sb.append(codeValue);

value = value.substring(pos + preFix.length() + 4, value.length());

}

sb.append(value);

return sb.toString();

}

/* ********************************************

* method name : getHex

* description : 将含生僻字的字符串转化成含16进制编码的字符串

* @return : String

* @param : @param name

* @param : @return

* modified : ncc , 2017-12-20

* @see :

* ********************************************/

@SuppressWarnings("static-access")

public String getHex(String name) {

StringBuffer sb = new StringBuffer();

for (int i = 0; i < name.length(); i++) {

String value = this.nameToValue.get(name.substring(i, i + 1));

if (value == null) {

sb.append(name.substring(i, i + 1));

} else {

sb.append(preFix + value);

}

}

return sb.toString();

}

public static void main(String[] args) {

RareWordUtil cu = RareWordUtil.getInstance();

String name = "王喆昊";

name = cu.getHex(name);

System.out.println("Cent2Dollar(1) = " + name);

name = cu.getRareWord(name);

System.out.println("Cent2Dollar(1) = " + name);

}

}

代码中用的的txt文件见附件。

java获取生僻字_生僻字与16进制的转换相关推荐

  1. java中的进制输出转换_java中进制的转换,Byte与16进制的转换

    java中对于进制的转换有很多方式,其中对于常见的基本的二进制 八进制 十进制 十六进制等的转换有对于的包装类实现,不需要通过二外的算法来进行实现,具体如下: 首先关于最简单的二进制转换的方法有: 十 ...

  2. pythonprint字节按照16进制输出_对python以16进制打印字节数组的方法详解

    对python以16进制打印字节数组的方法详解 一.问题描述 如果直接用print打印bytes的话,有时候会直接显示ascii对应的字符,看起来很蛋疼. 二.运行效果 上面一行是直接用print打印 ...

  3. 进制转换c++代码_跟小黑学漏洞利用开发之16进制字符转换

    Hello Every Boby! 又是一篇缓冲区漏洞利用的文章,本文我们将继续使用vulnserver漏洞练习程序中-HTER指令,它与前一篇Unicode类似.LTER缓冲区转换为Unicode, ...

  4. java将一个数转成36进制的数_编程实现将一个N进制数转换成M进制数。

    python: 手写算法版: def conversion_num(num, src, dest): rtn = '' # 1.校验源和目标是否相同 if src == dest: rtn = num ...

  5. CentOS中获取文件的前四个字节的16进制值

    od -N4 -t x1 test.txt|head -1|sed -e 's/0000000//g' -e 's/ //g'|tr -d '\n' 转载于:https://blog.51cto.co ...

  6. java中文句号转换英文句号_java实现中文或其他语言及标点符号等转换成unicode字符串,或unicode的16进制码转换回文字或符号等...

    packageorg.analysisitem20181016.test;public classCode128Test2019052201 {public static final String U ...

  7. java一个byte字节可以存2个16进制字符

    一个字节是8位(bit),xxxxxxxx ,范围从00000000 - 11111111,表示0到255. 一个16进制字符(用二进制表示是xxxx)最多只表示到10进制的15(即16进制的F) 要 ...

  8. 16进制怎么转换潘通_使用此免费应用程序查找Pantone颜色十六进制代码

    Pantone颜色匹配系统为Pantone制作的颜色定义特定的值. 这些颜色主要用于物理装饰和打印匹配,但它们在数字上也可以正常工作. 尽管如此, 匹配每种Pantone颜色的精确十六进制代码仍然是一 ...

  9. java 字节 16进制_Java字节数组和16进制字符串的互相转化

    背景基础知识: 1.1. "字符"是由数字来表示的 先来重新了解一下计算机是如何处理"字符"的,这个原理是大家必须记住的,特别是在用JAVA写程序的时候,万万不 ...

最新文章

  1. deepstream-开放式实时服务器
  2. 小麦的一生矢量图收藏贴-从种子的萌发到完熟
  3. 程序猿职业生涯的迷惘与野望
  4. JS中生成8位的随机数字
  5. 用赫夫曼树进行文件的压缩
  6. supervisor 子进程退出_用supervisor监管你的程序,不用担心程序挂了
  7. 数据不动模型动-联邦学习的通俗理解与概述
  8. XX基金 机器学习平台使用情况访谈总结
  9. 损失函数理解汇总,结合 PyTorch1.7 和 TensorFlow2
  10. IT技术人需要具备哪些才能成功
  11. Atitit git push 报错 remote: error: hook declined to update git push 报错 remote: error: hook declined
  12. html 边距等于父节点,css的百分比margin,padding为什么不是相对于父元素的?
  13. linux MySQL数据备份
  14. 微软服务器补丁每月几号发布,微软11月安全公告 发布一个紧急级补丁
  15. 9 Nextflow configuration
  16. 咸鱼Maya笔记—Maya 编辑法线
  17. ssm毕设项目基于框架的动漫网站设计与实现q6dcx(java+VUE+Mybatis+Maven+Mysql+sprnig)
  18. RK3568 Android12 长按power键功能设置
  19. 商城尺码选择效果 jquery
  20. Angular Router的组件路由介绍

热门文章

  1. 互联网晚报 | 9月15日 星期三 | iPhone 13正式发布;天猫双11正式启动商家报名;华为推出鸿蒙矿山操作系统“矿鸿”...
  2. 华为数通知识点OSPF
  3. H5特效demo网站
  4. 查看git暂存区有哪些文件
  5. 在拥有vin码识别的时代,您还在傻乎乎手工录入吗?
  6. debug5x 微信_微信X5内核webview调试
  7. 插入排序一块说说-很合适~~~二分查找和折半
  8. 路由器不同网段虚拟服务器设置,局域网中不同网段互访?静态路由表必须要学会设置...
  9. DBA的主要工作是什么
  10. 2_Gui_Tkinter(python标准库)