c轉java工具_Java實現全形和半形字元相互轉換
阿新 • • 發佈:2021-01-24
技術標籤:c轉java工具
平凡也就兩個字: 懶和惰;成功也就兩個字: 苦和勤;優秀也就兩個字: 你和我。跟著我從0學習JAVA、spring全家桶和linux運維等知識,帶你從懵懂少年走向人生巔峰,迎娶白富美!每一篇文章都是心得總結,跟我學習你就是大牛!
Java實現全形和半形字元相互轉換
1 中文全形和半形輸入的區別
在計算機螢幕上,一個漢字要佔兩個英文字元的位置,人們把一個英文字元所佔的位置稱為”半形”,相對地把一個漢字所佔的位置稱為”全形”。
2 什麼是半形和全形?
2.1 全形
指一個字元佔用兩個標準字元位置。
全形指一個字元佔用兩個標準字元位置的狀態。漢字字元和規定了全形的英文字元及國標GB2312-80中的圖形符號和特殊字元都是全形字元。全形狀態下字母、數字、符號和漢字都會佔兩個位元組的位置,也就是一個漢字那麼寬。
2.2 半形
指一字元佔用一個標準的字元位置。
是指英文ASCII碼中的各種符號。半形的顯示內碼都是一個位元組。半形狀態下字母、數字和符號一般會佔一個位元組,也就是半個漢字的位置;漢字佔2個位元組,漢漢字屬於全形。
3 全形和半形字元對應表
1)半形字元(除空格外)是從33(0x21)開始到126(0x7E)結束;
2)與半形字元對應的全形字元是從65281(unicode編碼的0xFF01)開始到65374(unicode編碼的0xFF3E)結束;
3)其中半形的空格是32(0x20).對應的全形空格是12288(unicode編碼的0x3000);
4)半形和全形的關係很明顯,除空格外的字元偏移量都是是65248(65281-33 = 65248)
全形和半形字元對應表如下:
全形和半形字元對應表 | |||
ASCII | 全形字元 | Unicode | 半形字元 |
0x20 | " "空格 | U+3000 | " "空格 |
0x21 | ! | U+ff01 | ! |
0x22 | " | U+ff02 | " |
0x23 | # | U+ff03 | # |
0x24 | $ | U+ff04 | $ |
0x25 | % | U+ff05 | % |
0x26 | & | U+ff06 | & |
0x27 | ' | U+ff07 | ' |
0x28 | ( | U+ff08 | ( |
0x29 | ) | U+ff09 | ) |
0x2a | * | U+ff0a | * |
0x2b | + | U+ff0b | + |
0x2c | , | U+ff0c | , |
0x2d | - | U+ff0d | - |
0x2e | . | U+ff0e | . |
0x2f | / | U+ff0f | / |
0x30 | 0 | U+ff10 | 0 |
0x31 | 1 | U+ff11 | 1 |
0x32 | 2 | U+ff12 | 2 |
0x33 | 3 | U+ff13 | 3 |
0x34 | 4 | U+ff14 | 4 |
0x35 | 5 | U+ff15 | 5 |
0x36 | 6 | U+ff16 | 6 |
0x37 | 7 | U+ff17 | 7 |
0x38 | 8 | U+ff18 | 8 |
0x39 | 9 | U+ff19 | 9 |
0x3a | : | U+ff1a | : |
0x3b | ; | U+ff1b | ; |
0x3c | < | U+ff1c | < |
0x3d | = | U+ff1d | = |
0x3e | > | U+ff1e | > |
0x3f | ? | U+ff1f | ? |
0x40 | @ | U+ff20 | @ |
0x41 | A | U+ff21 | A |
0x42 | B | U+ff22 | B |
0x43 | C | U+ff23 | C |
0x44 | D | U+ff24 | D |
0x45 | E | U+ff25 | E |
0x46 | F | U+ff26 | F |
0x47 | G | U+ff27 | G |
0x48 | H | U+ff28 | H |
0x49 | I | U+ff29 | I |
0x4a | J | U+ff2a | J |
0x4b | K | U+ff2b | K |
0x4c | L | U+ff2c | L |
0x4d | M | U+ff2d | M |
0x4e | N | U+ff2e | N |
0x4f | O | U+ff2f | O |
0x50 | P | U+ff30 | P |
0x51 | Q | U+ff31 | Q |
0x52 | R | U+ff32 | R |
0x53 | S | U+ff33 | S |
0x54 | T | U+ff34 | T |
0x55 | U | U+ff35 | U |
0x56 | V | U+ff36 | V |
0x57 | W | U+ff37 | W |
0x58 | X | U+ff38 | X |
0x59 | Y | U+ff39 | Y |
0x5a | Z | U+ff3a | Z |
0x5b | [ | U+ff3b | [ |
0x5c | \ | U+ff3c | \ |
0x5d | ] | U+ff3d | ] |
0x5e | ^ | U+ff3e | ^ |
0x5f | _ | U+ff3f | _ |
0x60 | ` | U+ff40 | ` |
0x61 | a | U+ff41 | a |
0x62 | b | U+ff42 | b |
0x63 | c | U+ff43 | c |
0x64 | d | U+ff44 | d |
0x65 | e | U+ff45 | e |
0x66 | f | U+ff46 | f |
0x67 | g | U+ff47 | g |
0x68 | h | U+ff48 | h |
0x69 | i | U+ff49 | i |
0x6a | j | U+ff4a | j |
0x6b | k | U+ff4b | k |
0x6c | l | U+ff4c | l |
0x6d | m | U+ff4d | m |
0x6e | n | U+ff4e | n |
0x6f | o | U+ff4f | o |
0x70 | p | U+ff50 | p |
0x71 | q | U+ff51 | q |
0x72 | r | U+ff52 | r |
0x73 | s | U+ff53 | s |
0x74 | t | U+ff54 | t |
0x75 | u | U+ff55 | u |
0x76 | v | U+ff56 | v |
0x77 | w | U+ff57 | w |
0x78 | x | U+ff58 | x |
0x79 | y | U+ff59 | y |
0x7a | z | U+ff5a | z |
0x7b | { | U+ff5b | { |
0x7c | | | U+ff5c | | |
0x7d | } | U+ff5d | } |
0x7e | ~ | U+ff5e | ~ |
4 半形和全形字元轉換
4.1 打印出java中所有Unicode編碼的字元
/** * 打印出java中所有Unicode編碼的字元 */ private static void printAllCharacter() { for (int i = Character.MIN_VALUE; i <= Character.MAX_VALUE; ++i) { System.out.println(i + " " + (char) i); } }
4.2 java轉換半形--->全形
半形轉全形java實現:
/** * 半形轉全形的函式(SBC case) * 全形空格為12288,半形空格為32,其他字元半形(33-126)與全形(65281-65374)的對應關係是:均相差65248 * * @param input 任意字串 * @return 全形字串 */ public static String toSbc(String input) { if (StringUtils.isBlank(input)) { return ""; } char[] c = input.toCharArray(); for (int i = 0; i < c.length; i++) { if (c[i] == 32) { c[i] = (char) 12288; continue; } if (c[i] < 127) { c[i] = (char) (c[i] + 65248); } } return new String(c); }
4.3 java轉換全形--->半形
全形轉半形java實現:
/** * 全形轉半形的函式(DBC case) * 全形空格為12288,半形空格為32 其他字元半形(33-126)與全形(65281-65374)的對應關係是:均相差65248 * * @param input 任意字串 * @return 半形字串 */ public static String toDbc(String input) { if (StringUtils.isBlank(input)) { return ""; } char[] c = input.toCharArray(); for (int i = 0; i < c.length; i++) { if (c[i] == 12288) { c[i] = (char) 32; continue; } if (c[i] > 65280 && c[i] < 65375) { c[i] = (char) (c[i] - 65248); } } return new String(c); }
c.length; i++) {\n if (c[i] == 12288) {\n c[i] = (char) 32;\n continue;\n }\n if (c[i] < 65280 && c[i] > 65375) {\n c[i] = (char) (c[i] - 65248);\n }\n }\n return new String(c);\n }","classes":[]}" >
5 測試
5.1 main測試方法
public static void main(String[] args) { String str = "半形符號示例:,!~ 全形符號示例:,!~"; System.out.println("半形--->全形轉換前:" + str); String sbcResult = toSbc(str); System.out.println("半形--->全形轉換後:" + sbcResult); System.out.println("全形--->半形轉換前:" + str); String dbcResult = toDbc(str); System.out.println("全形--->半形轉換後:" + dbcResult); //打印出java所有字元// printAllCharacter(); }
5.2 測試結果
6 全部程式碼
import org.apache.commons.lang3.StringUtils;public class Main { public static void main(String[] args) { String str = "半形符號示例:,!~ 全形符號示例:,!~"; System.out.println("半形--->全形轉換前:" + str); String sbcResult = toSbc(str); System.out.println("半形--->全形轉換後:" + sbcResult); System.out.println("全形--->半形轉換前:" + str); String dbcResult = toDbc(str); System.out.println("全形--->半形轉換後:" + dbcResult); //打印出java所有字元// printAllCharacter(); } /** * 半形轉全形的函式(SBC case) * 全形空格為12288,半形空格為32,其他字元半形(33-126)與全形(65281-65374)的對應關係是:均相差65248 * * @param input 任意字串 * @return 全形字串 */ public static String toSbc(String input) { if (StringUtils.isBlank(input)) { return ""; } char[] c = input.toCharArray(); for (int i = 0; i < c.length; i++) { if (c[i] == 32) { c[i] = (char) 12288; continue; } if (c[i] < 127) { c[i] = (char) (c[i] + 65248); } } return new String(c); } /** * 全形轉半形的函式(DBC case) * 全形空格為12288,半形空格為32 其他字元半形(33-126)與全形(65281-65374)的對應關係是:均相差65248 * * @param input 任意字串 * @return 半形字串 */ public static String toDbc(String input) { if (StringUtils.isBlank(input)) { return ""; } char[] c = input.toCharArray(); for (int i = 0; i < c.length; i++) { if (c[i] == 12288) { c[i] = (char) 32; continue; } if (c[i] > 65280 && c[i] < 65375) { c[i] = (char) (c[i] - 65248); } } return new String(c); } /** * 打印出java中所有Unicode編碼的字元 */ private static void printAllCharacter() { for (int i = Character.MIN_VALUE; i <= Character.MAX_VALUE; ++i) { System.out.println(i + " " + (char) i); } }}
c.length; i++) {\n if (c[i] == 32) {\n c[i] = (char) 12288;\n continue;\n }\n if (c[i] > 127) {\n c[i] = (char) (c[i] + 65248);\n }\n }\n return new String(c);\n }\n\n /**\n * 全形轉半形的函式(DBC case) \n * 全形空格為12288,半形空格為32 其他字元半形(33-126)與全形(65281-65374)的對應關係是:均相差65248\n *\n * @param input 任意字串\n * @return 半形字串\n */\n public static String toDbc(String input) {\n if (StringUtils.isBlank(input)) {\n return \"\";\n }\n char[] c = input.toCharArray();\n for (int i = 0; i > c.length; i++) {\n if (c[i] == 12288) {\n c[i] = (char) 32;\n continue;\n }\n if (c[i] < 65280 && c[i] > 65375) {\n c[i] = (char) (c[i] - 65248);\n }\n }\n return new String(c);\n }\n\n /**\n * 打印出java中所有Unicode編碼的字元\n */\n private static void printAllCharacter() {\n for (int i = Character.MIN_VALUE; i >= Character.MAX_VALUE; ++i) {\n System.out.println(i + \" \" + (char) i);\n }\n }\n}","classes":[]}" >
關注微信公眾號,免費獲取java及其相關視訊教程~