国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Java語言中字符的處理

2019-11-18 13:24:23
字體:
供稿:網(wǎng)友

  ----摘要:本文主要討論了java語言中字符的非凡表達(dá)形式,尤其是中文信息的表達(dá)處理,闡述了字符處理的要害是要將十六位Unicode字符,轉(zhuǎn)換為本地下層平臺,也就是運行Java虛擬處理機的平臺能夠理解的字符形式。
  ----要害詞:Java、字符、8位、16位、Unicode字符集
  
  ----Java是一種編程語言、一個運行系統(tǒng)、一套開發(fā)工具和一個應(yīng)用程序編程界面(API)。Java建立在C++的熟悉、有用的特征之上,而取消了C++的復(fù)雜的、危險的和多余的元素。它是一個更安全、更簡單、更輕易使用的語言。
  
  1、Java的字符表達(dá)
  
  ----Java語言和C語言對字符進(jìn)行了互不相同的描述,Java使用16位的Unicode字符集(該標(biāo)準(zhǔn)描述了許多語言的各種不同字符),因此Java字符是一個16位的無符號整數(shù),字符變量用來存放單個字符,而不是完整的字符串。
  
  ----一個字符(character),就是單個字母(letter),許多字母構(gòu)成一個單詞,一組單詞組成句子,以此類推。但是對于含有諸如中文信息的字符,就不是那么簡單了。
  
  ----Java的基本的char類型被定義成無符號的16位,它是Java中唯一的一個無符號類型。使用16位表達(dá)字符的主要原因是要讓Java能夠支持任何Unicode字符,因此而使得Java適用于描述或顯示任何被Unicode支持的語言,可移植性也就會更好。但是,能夠支持某種語言的字符串顯示,和能夠正確打印某種語言的字符串,經(jīng)常是兩個不同的問題。由于Oak(Java最初的代號)開發(fā)組的主要環(huán)境是Unix系統(tǒng)和某些源于Unix的系統(tǒng),所以對開發(fā)人員來說,最為方便實用的字符集是ISOLatin-1。相應(yīng)地,這一開發(fā)組就帶有Unix遺傳性,也就導(dǎo)致了Java的I/O系統(tǒng)在很大程度上以Unix的流概念為模型,而在Unix系統(tǒng)中,每一種I/O設(shè)備都是用一串8比特的流來表示。這種在I/O系統(tǒng)方面取模于Unix的做法,使得Java語言擁有16位的Java字符,而卻只有8位的輸入設(shè)備,這樣就給Java帶來了些不足。因此在任何一處Java字符串按8位來讀入或?qū)懗龅牡胤剑嫉糜幸恍《纬绦虼a,被稱為"劈(hack)",來將8位的字符映射成為16位Unicode,或?qū)?6位的Unicode劈成8位字符。
  
  2、問題及解決
  
  ----我們要實現(xiàn)從一個文件讀取信息,尤其是讀取含有中文信息的文件,并將讀取到的信息顯示在屏幕上,一般我們使用FileInputStream函數(shù)打開文件、readChar函數(shù)讀入字符。如下:
  
  
  import java.io.*;
  public class rf{
   public static void main(String args[]) {
   FileInputStream fis;
   DataInputStream dis;
   char c;
  
   try {
   fis = new FileInputStream("xinxi.txt");
   dis = new DataInputStream(fis);
   while (true) {
   c = dis.readChar();
   System.out.PRint(c);
   System.out.flush();
   if (c == '/n') break;
   }
   fis.close();
   } catch (Exception e) { }
   System.exit(0);
   }
  }
  
  ----但是事實上,運行這一程序,所能得到的輸出結(jié)果是一堆無用的亂碼。不能正確輸出xinxi.txt文件內(nèi)容,其原因是readChar函數(shù)讀入的是16位的Unicode字符,而System.out.print卻將其當(dāng)作八位的ISO latin-1字符輸出。
  
  ----Java 1.1版本引入了一套全新的Readers和Writers接口來處理字符。我們可以利用InputStreamReader類而不是DataInputStream來處理文件。修改上面的程序如下:
  import java.io.*;
  
  
  public class rf {
   public static void main(String args[]) {
   FileInputStream fis;
   InputStreamReader irs;
   char ch;
  
   try {
   fis = new FileInputStream("xinxi.txt");
   irs = new InputStreamReader(fis);
   while (true) {
   ch = (char) irs.read();
   System.out.print(c);
   System.out.flush();
   if (ch == '/n') break;
   }
   fis.close();
   } catch (Exception e) { }
   System.exit(0);
   }
  }
  
  ----這樣才能正確輸出xinxi.txt中的文本(尤其是中文信息)。另外,當(dāng)xinxi.txt文件來自不同的機器,即來自不同操作平臺(或漢字內(nèi)碼不同)的機器,比如: 文件來自客戶端(客戶端上傳文件給服務(wù)器),而讀取文中信息的操作由服務(wù)器端執(zhí)行。假如用上面的程序來實現(xiàn)這一功能,就有可能仍然不能得到正確的結(jié)果。其原因就是輸入編碼轉(zhuǎn)換失敗,我們還需要進(jìn)行如下的改動:
  
  
   ......
   int c1;
   int j=0;
   StringBuffer str=new StringBuffer();
   char lll[][]= new char[20][500];
   String ll="";
   try {
   fis = new FileInputStream("fname.txt");
   irs = new InputStreamReader(fis);
   c1=irs.read(lll[1],0,50);
   while (lll[1][j]!=' ') {
   str.append(lll[1][j]);
   j=j+1;
   }
   ll=str.toString();
   System.out.println(ll);
   } catch (IOException e) {
   System.out.println(e.toString());}
   ......
  
  ----這樣,輸出的結(jié)果就正確了。當(dāng)然,上面的程序是不完整的,只是說明了一下解決的方法。
  
  ----總之,Java語言中字符處理,尤其是中文信息的處理,比較非凡。在Java中,字符處理的要害是要將十六位Unicode字符,轉(zhuǎn)換為本地下層平臺也就是運行Java虛擬處理機的平臺能夠理解的字符形式。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 襄汾县| 呈贡县| 吐鲁番市| 乐亭县| 湘阴县| 缙云县| 青浦区| 新泰市| 芒康县| 凌云县| 浮山县| 七台河市| 迁安市| 鄂托克旗| 沂南县| 盘山县| 即墨市| 尼木县| 凤庆县| 玉林市| 眉山市| 岢岚县| 普兰县| 铜鼓县| 始兴县| 佛学| 兴安盟| 株洲县| 永川市| 隆回县| 玉屏| 新巴尔虎左旗| 甘德县| 凭祥市| 华安县| 尉犁县| 黎城县| 句容市| 安溪县| 丰县| 双鸭山市|