最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java String字符串和Unicode字符相互轉(zhuǎn)換代碼詳解

 更新時間:2019年05月13日 08:35:05   作者:JodenHe  
這篇文章主要介紹了Java String字符串和Unicode字符相互轉(zhuǎn)換代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

網(wǎng)上大部分有關(guān)“Java String字符串和Unicode字符相互轉(zhuǎn)換代碼”的博文幾乎都僅是將全為Unicode字符的字符串進行轉(zhuǎn)換,而我們?nèi)粘:芸赡苄枰氖菍⒒煊衅胀ㄗ址腢nicode一并轉(zhuǎn)換(例如“\u0061\u0062\u0063(123)”,我們希望轉(zhuǎn)換成“abc(123)”,而實際上網(wǎng)上的通用方法并不符合該需求,運行即報錯),普通字符跳過而Unicode字符要進行轉(zhuǎn)換,在進行字符串的查找替換截取什么的使用正則表達式往往是個很好的選擇。

因此作者我結(jié)合了網(wǎng)上提供的方法結(jié)合正則i表達式實現(xiàn)該需求!

在進行代碼講解時我先貼出實現(xiàn)代碼:

網(wǎng)上一般實現(xiàn)代碼:

字符串轉(zhuǎn)換unicode java方法代碼片段:

 /**
	 * 字符串轉(zhuǎn)換unicode
	 * @param string
	 * @return
	 */
	public static String string2Unicode(String string) {
		StringBuffer unicode = new StringBuffer();
		for (int i = 0; i < string.length(); i++) {
			// 取出每一個字符
			char c = string.charAt(i);
			// 轉(zhuǎn)換為unicode
			unicode.append("\\u" + Integer.toHexString(c));
		}
 
		return unicode.toString();
	}

unicode轉(zhuǎn)換字符串java方法代碼片段:

/**
	 * unicode 轉(zhuǎn)字符串
	 * @param unicode 全為 Unicode 的字符串
	 * @return
	 */
	public static String unicode2String(String unicode) {
		StringBuffer string = new StringBuffer();
		String[] hex = unicode.split("\\\\u");
 
		for (int i = 1; i < hex.length; i++) {
			// 轉(zhuǎn)換出每一個代碼點
			int data = Integer.parseInt(hex[i], 16);
			// 追加成string
			string.append((char) data);
		}
 
		return string.toString();
	

結(jié)合正則實現(xiàn)的代碼:

混有普通字符的Unicode轉(zhuǎn)換為字符串:

/**
	 * 含有unicode 的字符串轉(zhuǎn)一般字符串
	 * @param unicodeStr 混有 Unicode 的字符串
	 * @return
	 */
	public static String unicodeStr2String(String unicodeStr) {
		int length = unicodeStr.length();
		int count = 0;
		//正則匹配條件,可匹配“\\u”1到4位,一般是4位可直接使用 String regex = "\\\\u[a-f0-9A-F]{4}";
		String regex = "\\\\u[a-f0-9A-F]{1,4}";
		Pattern pattern = Pattern.compile(regex);
		Matcher matcher = pattern.matcher(unicodeStr);
		StringBuffer sb = new StringBuffer();
		
		while(matcher.find()) {
			String oldChar = matcher.group();//原本的Unicode字符
			String newChar = unicode2String(oldChar);//轉(zhuǎn)換為普通字符
			// int index = unicodeStr.indexOf(oldChar);
      // 在遇見重復出現(xiàn)的unicode代碼的時候會造成從源字符串獲取非unicode編碼字符的時候截取索引越界等
			int index = matcher.start();
 
			sb.append(unicodeStr.substring(count, index));//添加前面不是unicode的字符
			sb.append(newChar);//添加轉(zhuǎn)換后的字符
			count = index+oldChar.length();//統(tǒng)計下標移動的位置
		}
		sb.append(unicodeStr.substring(count, length));//添加末尾不是Unicode的字符
		return sb.toString();
	}

完整代碼:

package util;
 
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
/**
 * 
 * <p>Title: String 與 Unicode 互相轉(zhuǎn)換的工具類</p>
 * <p>Description: </p>
 * <p>Company: SCAU@Copyright</p>
 * @Copyright 1.0
 * @author jodenhe (824923282@qq.com)
 * @version 1.0
 * @since 2017年8月17日 下午9:42:50
 */
public class StringUnicodeUtil {
	
	/**
	 * 含有unicode 的字符串轉(zhuǎn)一般字符串
	 * @param unicodeStr 混有 Unicode 的字符串
	 * @return
	 */
	public static String unicodeStr2String(String unicodeStr) {
		int length = unicodeStr.length();
		int count = 0;
		//正則匹配條件,可匹配“\\u”1到4位,一般是4位可直接使用 String regex = "\\\\u[a-f0-9A-F]{4}";
		String regex = "\\\\u[a-f0-9A-F]{1,4}";
		Pattern pattern = Pattern.compile(regex);
		Matcher matcher = pattern.matcher(unicodeStr);
		StringBuffer sb = new StringBuffer();
		
		while(matcher.find()) {
			String oldChar = matcher.group();//原本的Unicode字符
			String newChar = unicode2String(oldChar);//轉(zhuǎn)換為普通字符
			// int index = unicodeStr.indexOf(oldChar);
      // 在遇見重復出現(xiàn)的unicode代碼的時候會造成從源字符串獲取非unicode編碼字符的時候截取索引越界等
			int index = matcher.start();
			
			sb.append(unicodeStr.substring(count, index));//添加前面不是unicode的字符
			sb.append(newChar);//添加轉(zhuǎn)換后的字符
			count = index+oldChar.length();//統(tǒng)計下標移動的位置
		}
		sb.append(unicodeStr.substring(count, length));//添加末尾不是Unicode的字符
		return sb.toString();
	}
	
	/**
	 * 字符串轉(zhuǎn)換unicode
	 * @param string
	 * @return
	 */
	public static String string2Unicode(String string) {
		StringBuffer unicode = new StringBuffer();
		for (int i = 0; i < string.length(); i++) {
			// 取出每一個字符
			char c = string.charAt(i);
			// 轉(zhuǎn)換為unicode
			unicode.append("\\u" + Integer.toHexString(c));
		}
 
		return unicode.toString();
	}
 
	/**
	 * unicode 轉(zhuǎn)字符串
	 * @param unicode 全為 Unicode 的字符串
	 * @return
	 */
	public static String unicode2String(String unicode) {
		StringBuffer string = new StringBuffer();
		String[] hex = unicode.split("\\\\u");
 
		for (int i = 1; i < hex.length; i++) {
			// 轉(zhuǎn)換出每一個代碼點
			int data = Integer.parseInt(hex[i], 16);
			// 追加成string
			string.append((char) data);
		}
 
		return string.toString();
	}
	
	public static void main(String[] args) {
		String str = "abc";
		String str2 = string2Unicode(str);
		System.out.println(str2);
		System.out.println(unicodeStr2String(str2));
		System.out.println(unicodeStr2String("\\u61HJ\\u62\\u63(sfkfdsl)"));
	}
}

代碼運行結(jié)果圖:

重要代碼講解:

代碼的實現(xiàn)其實很簡單,因此只對核心主要代碼進行講解,如對代碼有疑惑可私信或留下評論!

1、正則匹配規(guī)則:

String regex = \\\\u[a-f0-9A-F]{1,4};

這個是正則匹配的規(guī)則,可能你會疑惑為什么使用“\\\\u”來匹配javan字符串的“\\u”,原因很簡單,因為這樣才匹配得上嘛(開個玩笑)直接看測試圖1-2

測試圖1:

測試圖2:

很明顯在菜鳥上使用兩種匹配方式匹配到的結(jié)果是不同的,而java字符串需要轉(zhuǎn)義,上圖的“\u”java就應該是“\\u”,因此就要使用“\\\\u”來進行匹配!

[a-f0-9A-F]{1,4}

”[a-f0-9A-F]“ :這個意思就是a到f,0到9,A到F出現(xiàn)的數(shù)都符合要求,“{1,4}”意思是前面的字符出現(xiàn)1到4個(其實一般的Unicode都是“\u”后面家4個字符的,如“\u0061”代表“a”,因此該式子可改為“\\\\u[a-f0-9A-F]{4}”,這樣可能更符合實際要求)

其余的代碼部分可查看源文件的注釋,應該是可以理解的,慢慢推敲一下,應該不難。

以上所述是小編給大家介紹的Java String字符串和Unicode字符相互轉(zhuǎn)換代碼詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 你要知道IDEA的這些必備插件

    你要知道IDEA的這些必備插件

    這篇文章主要介紹了你要知道IDEA的這些必備插件,文中有非常詳細的圖文示例及代碼,對正在使用IDEA的小伙伴們有很好的幫助喲,需要的朋友可以參考下
    2021-05-05
  • 一文詳解Java如何實現(xiàn)自定義注解

    一文詳解Java如何實現(xiàn)自定義注解

    Java實現(xiàn)自定義注解其實很簡單,跟類定義差不多,只是屬性的定義可能跟我們平時定義的屬性略有不同,這篇文章主要給大家介紹了關(guān)于Java如何實現(xiàn)自定義注解的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • break在scala和java中的區(qū)別解析

    break在scala和java中的區(qū)別解析

    這篇文章主要介紹了break在scala和java中的區(qū)別解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • JVM:你知道為什么對象一定在堆中分配嗎

    JVM:你知道為什么對象一定在堆中分配嗎

    這篇文章主要介紹了jvm對象的創(chuàng)建和分配的相關(guān)資料,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下,希望能夠給你帶來幫助
    2021-08-08
  • 一篇文章帶你了解Java SpringBoot四大核心組件

    一篇文章帶你了解Java SpringBoot四大核心組件

    這篇文章主要介紹了SpringBoot四大核心組件的使用小結(jié),詳細的介紹了這方面的知識,有興趣的可以了解一下,希望能夠給你帶來幫助
    2021-09-09
  • Spring MVC項目開發(fā)踩過的一些bug

    Spring MVC項目開發(fā)踩過的一些bug

    這篇文章主要給大家介紹了關(guān)于Spring MVC項目開發(fā)踩過的一些bug,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • @PathParam和@QueryParam區(qū)別簡析

    @PathParam和@QueryParam區(qū)別簡析

    這篇文章主要介紹了@PathParam和@QueryParam區(qū)別,分享了相關(guān)實例代碼,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Java處理多API請求的方法詳解

    Java處理多API請求的方法詳解

    Java?中的并發(fā)是指語言并行運行多個線程的能力,允許同時執(zhí)行多個任務,
    2023-10-10
  • springboot中使用redis并且執(zhí)行調(diào)試lua腳本

    springboot中使用redis并且執(zhí)行調(diào)試lua腳本

    今天有個項目需要使用redis,并且有使用腳本的需求,本文主要介紹了springboot中使用redis并且執(zhí)行調(diào)試lua腳本,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • Java?hibernate延遲加載get和load的區(qū)別

    Java?hibernate延遲加載get和load的區(qū)別

    這篇文章主要介紹了Java?hibernate延遲加載get和load的區(qū)別,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09

最新評論

张家口市| 章丘市| 固阳县| 彝良县| 轮台县| 名山县| 开阳县| 阿克苏市| 遵化市| 南开区| 佛冈县| 和顺县| 开江县| 襄汾县| 平陆县| 雅江县| 曲阜市| 周口市| 安图县| 沙坪坝区| 焦作市| 阿尔山市| 若尔盖县| 东宁县| 晋江市| 广汉市| 沧源| 长葛市| 铜鼓县| 达孜县| 呼伦贝尔市| 秦皇岛市| 胶州市| 枣庄市| 茶陵县| 陆河县| 呼和浩特市| 台东县| 鄯善县| 章丘市| 固始县|