Java實現全形和半角字符相互轉換

2021-02-13 IT特靠譜

平凡也就兩個字: 懶和惰;
成功也就兩個字: 苦和勤;
優秀也就兩個字: 你和我。
跟著我從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/0x300U+ff1000x311U+ff1110x322U+ff1220x333U+ff1330x344U+ff1440x355U+ff1550x366U+ff1660x377U+ff1770x388U+ff1880x399U+ff1990x3a:U+ff1a:0x3b;U+ff1b;0x3c<U+ff1c<0x3d=U+ff1d=0x3e>U+ff1e>0x3f?U+ff1f?0x40@U+ff20@0x41AU+ff21A0x42BU+ff22B0x43CU+ff23C0x44DU+ff24D0x45EU+ff25E0x46FU+ff26F0x47GU+ff27G0x48HU+ff28H0x49IU+ff29I0x4aJU+ff2aJ0x4bKU+ff2bK0x4cLU+ff2cL0x4dMU+ff2dM0x4eNU+ff2eN0x4fOU+ff2fO0x50PU+ff30P0x51QU+ff31Q0x52RU+ff32R0x53SU+ff33S0x54TU+ff34T0x55UU+ff35U0x56VU+ff36V0x57WU+ff37W0x58XU+ff38X0x59YU+ff39Y0x5aZU+ff3aZ0x5b[U+ff3b[0x5c\U+ff3c\0x5d]U+ff3d]0x5e^U+ff3e^0x5f_U+ff3f_0x60`U+ff40`0x61aU+ff41a0x62bU+ff42b0x63cU+ff43c0x64dU+ff44d0x65eU+ff45e0x66fU+ff46f0x67gU+ff47g0x68hU+ff48h0x69iU+ff49i0x6ajU+ff4aj0x6bkU+ff4bk0x6clU+ff4cl0x6dmU+ff4dm0x6enU+ff4en0x6foU+ff4fo0x70pU+ff50p0x71qU+ff51q0x72rU+ff52r0x73sU+ff53s0x74tU+ff54t0x75uU+ff55u0x76vU+ff56v0x77wU+ff57w0x78xU+ff58x0x79yU+ff59y0x7azU+ff5az0x7b{U+ff5b{0x7c|U+ff5c|0x7d}U+ff5d}0x7e~U+ff5e~4 半角和全形字符轉換4.1 列印出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實現:

   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實現:

  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);  }


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); }


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); }
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); }
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); }
private static void printAllCharacter() { for (int i = Character.MIN_VALUE; i <= Character.MAX_VALUE; ++i) { System.out.println(i + " " + (char) i); } }}


      關注微信公眾號,免費獲取java及其相關視頻教程~

相關焦點

  • 全形半角字符轉換!
    在OCR識別中,由於字典中字符的全、半角不一致,會影響編碼的結果,進一步影響識別的結果,所以需要對全半角進行統一。
  • 從輸入法的全形、半角聊起:計算機的那些字符編碼
    從這裡就可以看出計算機是不識別人類信息的,它只是根據科學家對其內部電路的設計,將一堆高低電壓信號轉換為另一堆高低電壓信號。當計算機對用戶輸入的十進位展開運算時,它首先使用內部電路將十進位數字轉換為自己識別的二進位數,也就是高低電壓信號,這個轉換的過程就叫做「編碼」,而轉換的標準就是編碼格式。
  • 全形和半角的區別?
    在計算機屏幕上,一個漢字要佔兩個英文字符的位置,人們把一個英文字符所佔的位置稱為"半角",相應地把一個漢字所佔的位置稱為"全形"。
  • 輸入法半角和全形的區別
    第二個變化是英文字母,在半角狀態下英文字母比較小,這是正常的。當我們切換到全形,我們可以看到這些字母是粗體和大的。二是計算機技術的差異。在半角情況下,每個字母只有一個字符。輸入字符都是兩個字符二:全形和半角切換方式最簡單的方法是用滑鼠在桌面右下角的輸入法找到桌面上的月形圖標,點擊可以變成全角度,然後點擊就會變回來。另一種方法是自帶的輸入法,即使用shift +空格鍵,按在一起,就可以實現全形和半角開關。
  • 標點的全形和半角問題
    名偵探柯基第六十八期一般英文就用半角,中文用全形;轉:半角--指一字符佔用一個標準的字符位置通常的英文字母、數字鍵、符號鍵都是半角的,半角的顯示內碼都是一個字節。在系統內以上三種字符是作為基本代碼處理的,所以用戶輸入命令和參數時一般都使用半角。全形與半角各在什麼情況下使用?全形佔兩個字節,半角佔一個字節。
  • 實用·技巧之Excel字符轉換
    PROPER 函數的作用是將文本字符串的首字母及任何非字母字符(包括空格)之後的首字母轉換成大寫,將其餘的英文字母轉換成小寫,即實現通常意義下的英文單詞首字母大寫。全形半角字符轉換在中文版 Windows 環境下,英文字母、數字、日文片假名和某些標點符號包含了「全形」和「半角」兩種不同的形態。一個半角字符只佔用一個字節,而一個全形字符佔用兩個字節位置。
  • 輸入法裡的「全形」「半角」你懂過嗎
    C是全形,D是半角  從視覺上來說,差距是不大幾乎沒有的  但是!  既然他們名稱不一樣,那麼不同是肯定有的。  首先我們來了解一下什麼是全形和半角 全形:  漢字字符和規定了全形的英文字符及國標GB2312-80中的圖形符號和特殊字符都是全形字符。在全形中,字母和數字等與漢字一樣佔據著等寬的位置。
  • 全形半角碎碎念
    對於日美雙方專家當時爭議的「全形半角」問題,想必很多中國讀者也擁有和美國專家一定的疑惑:全形空格不就是一個正方形空格麼,怎麼會搞得那麼複雜?然而,正如日方專家所解釋的那樣,在東亞排版裡,全形半角標點並不是一個符號化的空格那麼簡單。討論中文排版必須談標點,而在仔細分析標點之前,我們必須把全形、半角的概念重新梳理一遍。
  • · 全形的黑點轉譯為半角·
    全形:·123457890-=~!@#¥%……&×()——+[]\;',./{}|:"<>?半角:·1234567890-=~!@#%……&*()——+【】、;『』,。、{}|:「」《》?英文:`1234567890-=~!
  • 特殊字符測試·文章(· 全形的不識別,只識別半角·)
    「 © 」、「Î」和這個「ô」,為什麼頁面會顯示「?」TAB空格全形:·123457890-=~!@#¥%……&×()——+[]\;',./{}|:"<>?
  • Excel VBA之函數篇-3.20 半角or 全形 數據格式統一很重要
    場景說明可能看見標題的時候,很多的童鞋都是懵逼的狀態的,什麼全形半角?不太了解嗎?看來如果這些童鞋的公司也有這樣的要求的話,估計就要遭殃咯,我們來看下右下角的輸入法,普遍常用的就是搜狗輸入法和QQ輸入法了,其實都是一樣的,看看截圖中的第二個圖標,就是逗號句號的那個他就是全形半角的開關,現在都是上面的黑點是藍色的,那就是全形,如果是中間是白色的,那就是半角了,那麼對於我們的輸入結果有什麼影響呢?
  • 掌握Excel轉換文本,快速轉換為其他形式
    在Excel中處理文本時,有時需要將現有的文本轉換為其他形式,如將字符串中的全/半角字符進行轉換、大/小寫字母進行轉換、貨幣符號進行轉換等。一、使用ASC函數將全形字符轉換為半角字符如果需要快速修改表格中的全形標點符號為半角標點符號,可以使用ASC函數快速進行轉換。
  • Excel常用函數之轉換函數
    Excel和Access歡迎點擊關注右上藍色字看標題轉換函數,可能一下子不知道何為轉換函數
  • C語言中字符串和數字的相互轉換實現代碼
    以下是對C語言中字符串和數字的相互轉換實現代碼進行了分析介紹,需要的朋友可以參考下1.數字轉換為字符串sprintf 跟printf 在用法上幾乎一樣,只是列印的目的地不同而已,前者列印到字符串中,後者則直接在命令行上輸出。
  • QQ雲輸入法的全形/半角切換快捷鍵是什麼
    QQ雲輸入法的全形/半角切換快捷鍵是shift+ Space。  QQ雲輸入法是運用雲計算和網頁技術實現的網頁拼音輸入工具,只要能上網就能在各種網頁上面進行中文拼音輸入,而不需要裝任何輸入軟體。QQ雲輸入法會根據所有用戶的輸入習慣來調整候選詞的排列位置,實現候選詞的智能排列,提高用戶的輸入體驗。用QQ拼音2.0以上版本,或QQ五筆1.2以上版本,在登錄QQ輸入法後,開始享有QQ輸入法的等級積分服務,當用戶等級達到LV4後,具備點亮圖標的特權。  QQ雲輸入法會根據所有用戶的輸入習慣來調整候選詞的排列位置,實現候選詞的智能排列,提高用戶的 輸入體驗。
  • 如何在Java中輕鬆地將字符串轉換為Integer
    在Java中有兩種將字符串轉換為Integer的方法, 使用Integer.parseInt()到Integer的字符串 使用Integer.value eOf()到Integer的字符串:4: error: bad operand types for binary operator '/' System.out.println("Using String:" + (strTest/4));因此,在對字符串執行peform數值操作之前,需要將其轉換為int。