java获取生僻字_生僻字与16进制的转换
字符串中的生僻字在传输和存储的过程中存在着各种各样的问题,为了便于传输和存储,我们通常会把这些生僻字转换为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进制的转换相关推荐
- java中的进制输出转换_java中进制的转换,Byte与16进制的转换
java中对于进制的转换有很多方式,其中对于常见的基本的二进制 八进制 十进制 十六进制等的转换有对于的包装类实现,不需要通过二外的算法来进行实现,具体如下: 首先关于最简单的二进制转换的方法有: 十 ...
- pythonprint字节按照16进制输出_对python以16进制打印字节数组的方法详解
对python以16进制打印字节数组的方法详解 一.问题描述 如果直接用print打印bytes的话,有时候会直接显示ascii对应的字符,看起来很蛋疼. 二.运行效果 上面一行是直接用print打印 ...
- 进制转换c++代码_跟小黑学漏洞利用开发之16进制字符转换
Hello Every Boby! 又是一篇缓冲区漏洞利用的文章,本文我们将继续使用vulnserver漏洞练习程序中-HTER指令,它与前一篇Unicode类似.LTER缓冲区转换为Unicode, ...
- java将一个数转成36进制的数_编程实现将一个N进制数转换成M进制数。
python: 手写算法版: def conversion_num(num, src, dest): rtn = '' # 1.校验源和目标是否相同 if src == dest: rtn = num ...
- 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 ...
- java中文句号转换英文句号_java实现中文或其他语言及标点符号等转换成unicode字符串,或unicode的16进制码转换回文字或符号等...
packageorg.analysisitem20181016.test;public classCode128Test2019052201 {public static final String U ...
- java一个byte字节可以存2个16进制字符
一个字节是8位(bit),xxxxxxxx ,范围从00000000 - 11111111,表示0到255. 一个16进制字符(用二进制表示是xxxx)最多只表示到10进制的15(即16进制的F) 要 ...
- 16进制怎么转换潘通_使用此免费应用程序查找Pantone颜色十六进制代码
Pantone颜色匹配系统为Pantone制作的颜色定义特定的值. 这些颜色主要用于物理装饰和打印匹配,但它们在数字上也可以正常工作. 尽管如此, 匹配每种Pantone颜色的精确十六进制代码仍然是一 ...
- java 字节 16进制_Java字节数组和16进制字符串的互相转化
背景基础知识: 1.1. "字符"是由数字来表示的 先来重新了解一下计算机是如何处理"字符"的,这个原理是大家必须记住的,特别是在用JAVA写程序的时候,万万不 ...
最新文章
- deepstream-开放式实时服务器
- 小麦的一生矢量图收藏贴-从种子的萌发到完熟
- 程序猿职业生涯的迷惘与野望
- JS中生成8位的随机数字
- 用赫夫曼树进行文件的压缩
- supervisor 子进程退出_用supervisor监管你的程序,不用担心程序挂了
- 数据不动模型动-联邦学习的通俗理解与概述
- XX基金 机器学习平台使用情况访谈总结
- 损失函数理解汇总,结合 PyTorch1.7 和 TensorFlow2
- IT技术人需要具备哪些才能成功
- Atitit git push 报错 remote: error: hook declined to update git push 报错 remote: error: hook declined
- html 边距等于父节点,css的百分比margin,padding为什么不是相对于父元素的?
- linux MySQL数据备份
- 微软服务器补丁每月几号发布,微软11月安全公告 发布一个紧急级补丁
- 9 Nextflow configuration
- 咸鱼Maya笔记—Maya 编辑法线
- ssm毕设项目基于框架的动漫网站设计与实现q6dcx(java+VUE+Mybatis+Maven+Mysql+sprnig)
- RK3568 Android12 长按power键功能设置
- 商城尺码选择效果 jquery
- Angular Router的组件路由介绍
热门文章
- 互联网晚报 | 9月15日 星期三 | iPhone 13正式发布;天猫双11正式启动商家报名;华为推出鸿蒙矿山操作系统“矿鸿”...
- 华为数通知识点OSPF
- H5特效demo网站
- 查看git暂存区有哪些文件
- 在拥有vin码识别的时代,您还在傻乎乎手工录入吗?
- debug5x 微信_微信X5内核webview调试
- 插入排序一块说说-很合适~~~二分查找和折半
- 路由器不同网段虚拟服务器设置,局域网中不同网段互访?静态路由表必须要学会设置...
- DBA的主要工作是什么
- 2_Gui_Tkinter(python标准库)