首页 > 代码库 > java处理含有中文的字符串.

java处理含有中文的字符串.

1. 问题描述:

 

原始数据是以行为单位的, 每行固定长度931个字节, 汉字占2个字节, 按照字典描述,共有96个字典,只有第32个字典为中文地址, 所以需要单独处理. 由于项目设计保密,故删除敏感数据. 供实验的数据是测试数据. 

在处理过程中,按照规定的字典长度截取字符串的时候,发现处理到汉字的时候出错. 那就需要单独处理汉字. 比较麻烦. 所以写了如下简便方法, 如有更好的解决方案,还请多多交流.

 

 

如何计算含有中文的字符串长度.

 

2. 解决方案:

源码:

package com.dk.rf;import java.io.*;import java.util.ArrayList;import java.util.List;/** * Created by zzy on 17/1/9. */public class ReadFile {    public static void main(String[] args) {     String path = "/Users/zzy/Downloads/QQdownload/test-readhanzi.txt";        readFileByLines(path);    }    /**     * 以行为单位读取文件,常用于读面向行的格式化文件     */    public static void readFileByLines(String fileName) {        File file = new File(fileName);        BufferedReader reader = null;        try {            System.out.println("以行为单位读取文件内容,一次读一整行:");//            reader = new BufferedReader(new FileReader(file));            reader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"GBK"));            String tempString = null;            int line = 1;            // 一次读入一行,直到读入null为文件结束            while ((tempString = reader.readLine()) != null) {                handleLines(tempString);                char [] chars;                chars = tempString.toCharArray();                line++;                if (line > 100){                    break ;                }            }            reader.close();        } catch (IOException e) {            e.printStackTrace();        } finally {            if (reader != null) {                try {                    reader.close();                } catch (IOException e1) {                }            }        }    }    /**     * 处理一行     * @param line     */    public static void handleLines(String line){//        System.out.println(line.length());        // 每一行数据分为96个字段        List strList = new ArrayList();        int start = 0;        int end = 0;        int [] ss = {42,42,42,8,3,1,1,1,1,1,                    6,10,11,11,11,11,11,21,21,21,                    4,6,12,4,6,4,3,2,12,6,                    8,15,40,3,4,6,10,1,1,5,                    2,2,2,2,4,4,11,11,12,12,                    12,12,3,3,8,1,8,8,8,8,                    8,8,8,8,8,8,8,1,16,8,                    8,8,8,8,8,32,2,1,2,14,                    4,3,9,12,3,1,8,1,12,15,                    21,1,2,1,1,97                    };        for (int i = 0; i < ss.length; i++ ){            if (i == 32){ // 单独处理地址                char[] cc = line.toCharArray();                int ss_32=0 ;//                int ff = 0;                System.out.println("-------"+start);                for (int j = start; j < start+ss[i]; j++) {                    ss_32++;                    ff ++;                    if (!isLetter(cc[j])){                        // 如果是汉字                        ss_32++;                    }                    if (ss_32 == 40){                        ss[i] = ff;                        break;                    }                }            }            end = start + ss[i];            if(start>=line.length())                return;            String temp = line.substring(start, end);            start = end;            strList.add(temp);            System.out.println("ss["+ i+ "]"+ss[i]+"temp="+temp);            // TO ,设计业务,需要继续,春节后交接        }    }    /**     * 判断一个字符是Ascill字符还是其它字符(如汉,日,韩文字符)     *     * @param c     * @return     */    public static boolean isLetter(char c) {        int k = 0x80;        return (c / k) == 0 ? true : false;    }}

 

3. 相关文件:

  test-readhanzi.txt 下载链接

java处理含有中文的字符串.