当前位置: 首页 > 图灵资讯 > 技术篇> Java语言中字符的处理

Java语言中字符的处理

来源:图灵教育
时间:2024-02-28 17:24:11

  ----关键词:Java、Java是一种编程语言,一个操作系统,一套开发工具,一个应用程序编程界面,8位,16位,Unicode字符集(API)。Java基于C++的熟悉性和有用性,取消了C++的复杂性、危险性和多余性。它是一种更安全、更简单、更容易使用的语言。

  1、Java字符表达-Java语言和C语言描述了不同的字符。Java使用16位数字的Unicode字符集(该标准描述了许多语言中的不同字符)。因此,Java字符是一个16位数字的无符号整数。字符变量用于存储单个字符,而不是一个完整的字符串。----一个字符(character),是单个字母(letter),许多字母构成一个单词,一组单词构成句子,以此类推。但是含有中文信息的字符就没那么简单了。----Java的基本char类型被定义为16位无符号,是Java中唯一的无符号类型。使用16位表达字符的主要原因是Java可以支持任何Unicode字符,因此Java可以更好地描述或显示任何Unicode支持的语言。然而,能够支持某种语言的字符串显示和能够正确打印某种语言的字符串往往是两个不同的问题。由于Oak(Java的初始代码)开发团队的主要环境是Unix系统和一些来自Unix的系统,最方便和实用的字符集是ISOLatin-1。相应地,这个开发团队具有Unix的遗传性,这导致Java的I/O系统在很大程度上以Unix的流概念为模型,而在Unix系统中,每个I/O设备都用一串8比特流来表示。这种在I/O系统中模仿Unix的做法使Java语言拥有16个Java字符,但只有8个输入设备,给Java带来了一些不足。因此,在任何Java字符串按8位读写的地方,都必须有一小段程序代码,称为“劈”(hack)将8位字符映射成16位Unicode,或将16位Unicode分成8位字符。

  2、问题和解决方案——我们需要从一个文件中读取信息,特别是包含中文信息的文件,并在屏幕上显示所读取的信息。一般来说,我们使用fileinputstream函数打开文件,readchar函数读取字符。如下: 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);}}----但事实上,运行此程序时,输出结果是一堆无用的乱码。xinxinxin输出不正确.txt文件的内容,原因是readchar函数读入16位Unicode字符,而systemm.out.然而,print将其视为八位ISO latin-1字符输出。xinxinxin输出不正确.txt文件的内容,原因是readchar函数读入16位Unicode字符,而systemm.out.然而,print将其视为八位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中的文本(尤其是中文信息)。另外,当xinxi.txt文件来自不同的机器,即来自不同操作平台(或不同汉字内码)的机器,例如: 文件来自客户端(客户端将文件上传到服务器),读取文本中信息的操作由服务器端执行。另外,当xinxi.txt文件来自不同的机器,即来自不同操作平台(或不同汉字内码)的机器,例如: 文件来自客户端(客户端将文件上传到服务器),读取文本中信息的操作由服务器端执行。如果使用上述程序来实现此功能,则可能仍然无法得到正确的结果。原因是输入编码转换失败,我们还需要做出以下改变: ...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());}...----这样,输出的结果是正确的。

  当然,上述程序是不完整的,只是解释了解决方案。当然,上述程序是不完整的,只是解释了解决方案。 ----简而言之,Java语言中的字符处理,特别是中文信息处理,更为特殊。在Java中,字符处理的关键是将16个Unicode字符转换为运行Java虚拟处理器的本地下层平台可以理解的字符形式。