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处理含有中文的字符串.的更多相关文章

  1. java对含有中文的字符串进行Unicode编码

    public class MyUtil { public static void main(String[] args) throws Exception { String s = "a中a ...

  2. isspace 对含有中文 的字符串进行检查的时候表现不正常!?

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> ...

  3. C#:对含有中文的字符串进行MD5加密

    MD5CryptoServiceProvider MD5 = new MD5CryptoServiceProvider(); var Sign = BitConverter.ToString(MD5. ...

  4. java判断字符串中是否含有中文

    /** * 判断字符串中是否含有中文 */ public static boolean isCNChar(String s){ boolean booleanValue = false; for(in ...

  5. 解决Java getResource 路径中含有中文的情况

    问题描述 当Java调用getResource方法,但是因为路径中含有中文时,得不到正确的路径 问题分析 编码转换问题 当我们使用ClassLoader的getResource方法获取路径时,获取到的 ...

  6. 解决Java工程URL路径中含有中文的情况

    问题: 当Java工程路径中含有中文时,得不到正确的路径 *** 解决: 这其实是编码转换的问题.当我们使用ClassLoader的getResource方法获取路径时,获取到的路径被URLEncod ...

  7. mybatis 插入 含有美元符号($) 字符串 报 java.lang.IndexOutOfBoundsException: No group 2 的问题

    一:问题描述: 在springboot-security框架生成BCryptPasswordEncoder()方法生成加密后的密码后,带有$符号,导致新增用户的时候插入不了,报(IndexOutOfB ...

  8. C#、Java实现按字节截取字符串包含中文汉字和英文字符数字标点符号等

    C#.Java实现按字节截取字符串,字符串中包含中文汉字和英文字符数字标点符号等. 在实际项目应用过程中,尤其是在web开发时可能遇到的比较多,就以我的(JiYF笨小孩管理系统)为例,再发布文章时候, ...

  9. base64编码的字符串(含有中文) 前端解码

    base64编码的字符串(含有中文) 前端解码 https://xue5602.github.io/2018/12/19/atob%E8%A7%A3%E7%A0%81utf-8%E5%AD%97%E7 ...

随机推荐

  1. 解决connect() failed (111: Connection refused) while connecting to upstream

    使用nginx时, 有可能遇到connect() failed (111: Connection refused) while connecting to upstream的问题. 如果upstrea ...

  2. SQL 撤销索引、表以及数据库

    通过使用 DROP 语句,可以轻松地删除索引.表和数据库. SQL DROP INDEX 语句 我们可以使用 DROP INDEX 命令删除表格中的索引. 用于 Microsoft SQLJet (以 ...

  3. display:inline-block,block,inline的区别与用法

    一.首先要了解什么是块级元素与行级元素 块级元素 会占领页面的一行,其后多个block元素自动换行. 可以设置width,height,设置了width后同样也占领一行.同样也可以设置   margi ...

  4. sanic set up

    (venv) MacBook-Pro:bin shihw$ pip3 install sanicCollecting sanic Downloading https://files.pythonhos ...

  5. 洛谷 P1049 装箱问题

    \[传送门在这呢!!\] 题目描述 有一个箱子容量为\(V\)(正整数,\(0 \le V \le 20000\)),同时有\(n\)个物品(\(0<n \le 30\),每个物品有一个体积(正 ...

  6. Entity Framework Core系列之DbContext

    前言: EF Core DbContext表示与数据库的会话,并提供与数据库通信的API,具有以下功能: 数据库连接 数据操作,如查询和持久化 更改追踪 模型构建 数据映射 对象缓存 事务管理 数据库 ...

  7. 599. Minimum Index Sum of Two Lists(easy)

    Suppose Andy and Doris want to choose a restaurant for dinner, and they both have a list of favorite ...

  8. openstack搭建之-nova配置(10)

    一. base节点设置数据库 mysql -u root -proot CREATE DATABASE nova_api; CREATE DATABASE nova; CREATE DATABASE ...

  9. adoop(四)HDFS集群详解

    阅读目录(Content) 一.HDFS概述 1.1.HDFS概述 1.2.HDFS的概念和特性 1.3.HDFS的局限性 1.4.HDFS保证可靠性的措施 二.HDFS基本概念 2.1.HDFS主从 ...

  10. linux 运维工程师发展路线

    linux运维发展常见的就是下面两条路线:第一条:运维应用-->系统架构-->运维开发-->系统开发第二条:运维应用-->应用dba-->架构dba-->开发DBA ...