java+分割+汉字和英文_Java分割中英文,并且中文不能分割一半?
最近准备入其他坑位。在面试过程中,遇到下面这题笔试题,拿出来分享分享。
题目:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
思路:每个文件编码格式不一致,如UTF-8、GBK等。其中,UTF-8 中文用三个字节表示,GBK 中文用两个字节表示。并且中文的字节是负数的。可以根据这个原理,把字符串转化为字节数组,判断最后字符是否为中文。如果是英文,则直接分割返回。否则,循环遍历字节数组,并作相应的负数统计并进行求模。
代码实现:
package com.geshanzsq;
import java.io.UnsupportedEncodingException;
/**
* @author geshanzsq
*/
public class SubString {
public static void main(String[] args) throws UnsupportedEncodingException {
String srcStr1 = "我ABC";
String srcStr2 = "我ABC汉的DEF";
splitString(srcStr1, 4);
splitString(srcStr2, 6);
}
public static void splitString(String str,int size) throws UnsupportedEncodingException {
//判断是否为空
if(str==null){
System.out.println("splitString is null");
return;
}
//判断分割位置是否小于等于0
if(size<=0){
System.out.println("截取字节长度必须大于0");
return;
}
//默认UTF-8 中文一般三个字节表示,gbk两个字节,UTF-8变化就是%3,gbk变化就是%3
byte[] bytes = str.getBytes("gbk");
//如果截取长度大于bytes长度,则直接打印字符串
if(size >= bytes.length){
System.out.println("splitString="+str);
return ;
}
//如果是中文,bytes为负数。最后一个不是中文,则直接分割
if(bytes[size-1] > 0){
String splitString = new String(bytes,0,size,"gbk");
System.out.println("splitString="+splitString);
return;
}
//字节负数统计并进行求模
int num = 0;
//循环到需要分割的长度,后面的不需要
for(int i = 0 ; i < size; i++ ){
if(bytes[i]<0){
num++;
num = num % 2;
}
}
String splitString = new String(bytes,0,size-num,"gbk");
System.out.println("splitString="+splitString);
}
}
运行结果:
splitString=我AB
splitString=我ABC
java+分割+汉字和英文_Java分割中英文,并且中文不能分割一半?相关推荐
- java 实现汉字转换拼音_Java实现汉字转换为拼音
# re: Java实现汉字转换为拼音 2006-11-24 15:06 芦苇 JAVA将汉字转化成拼音的方法 /** *//** ################################## ...
- java 实现汉字转换拼音_JAVA实现汉字转拼音功能代码实例
JAVA中汉字转拼音的方法并不复杂,可以使用pinyin4j包来实现. 一.下载pinyin4j的架包,并导入项目中,如下: 如果是maven项目,maven依赖如下: com.belerweb pi ...
- java 日期格式化 英文_Java SimpleDateFormat 中英文时间格式化转换
SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类.它允许进行格式化(日期 -> 文本).解析(文本 -> 日期)和规范化. SimpleDateFor ...
- java显示汉字乱码怎么办_java中的汉字显示问号乱码怎么解决
java中的汉字显示问号乱码怎么解决 发布时间:2020-06-23 22:16:38 来源:亿速云 阅读:97 作者:元一 java中的汉字显示问号乱码怎么解决?针对这个问题,今天小编总结了这篇文章 ...
- java什么变量用作英文_Java基础之变量-什么是变量
什么是变量: 在计算机语言中用来存储计算结果或表示值 如何命名Java变量: 如同酒店会给每个房间起个性化的名字一样,程序中的变量也需要用合理的名字进行管理-变量名! 变量命名要符合以下规则: 首字母 ...
- java 数字翻译成英文_Java实现将数字日期翻译成英文单词的工具类实例
本文实例讲述了Java实现将数字日期翻译成英文单词的工具类.分享给大家供大家参考,具体如下: package com.sunyard.etp.ag.util; import java.math.Big ...
- java 数字翻译成英文_Java实现数字日期翻译成英文单词的工具类案例分享
这篇文章主要介绍了Java实现将数字日期翻译成英文单词的工具类,结合完整实例形式分析了Java日期转换与字符串操作相关实现技巧,需要的朋友可以参考下 本文实例讲述了Java实现将数字日期翻译成英文单词 ...
- java过滤汉字和英文,java判断及过滤汉字
packagecom.test;importjava.util.regex.Matcher;importjava.util.regex.Pattern;public classTest { @org. ...
- java需要记住什么英文_JAVA英语面试题(苦涩的记忆)
JAVA英语面试题(苦涩的记忆) (2010-01-30 14:59:02) 标签: 杂谈 java 英语面试题 2008-11-13 11:051.Tell me a little about yo ...
最新文章
- linux 必须掌握的60个命令
- python开发环境比较好_python开发环境比较好,python 集成开发环境哪个好
- Linux命令及Linux终端的20个趣事
- GDCM:获取SubSequence数据的测试程序
- javafx性能_对JavaFX Mobile应用程序进行性能分析
- linux 内核 网卡驱动 移植,Linux内核移植步骤_添加DM9000网卡驱动(设备树).docx
- php 和bootstrap,bootstrap4和bootstrap3的区别是什么
- VC++6.0快捷键
- [C语言]排序问题--我的解答
- 异速联:解决打印样式个性化设置
- 95后阿里P7晒出工资单:狠补了这个,真香…
- c语言斐波那契数列for循环数组,C语言斐波那契数列的四种实现方式—递归,迭代,数组,队列...
- ndk编译 toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe
- 数据库三范式简单理解
- MyBatis中设置事务自动提交
- 第六章 颠覆与重塑思维,大数据与思维革命
- Cannot access ‘state‘ before initialization
- 企业的考勤管理系统应该具备哪些功能!
- python语法错误类型_python常见报错类型和异常处理
- 安诺伦代理iduron品牌——为学术研究和制药行业提供独特的糖胺聚糖产品系列
热门文章
- 将字符串中的每一个字母变成其下一个字母
- UART/USRAT协议
- 身份证照片比对,身份鉴别,人脸实名
- 一个字符串“0”,竟是B站崩溃的元凶...
- python编程锦囊pdf百度云_python编程锦囊 相关实例(示例源码)下载 - 好例子网
- oracle ebs web agent,《ORACLE EBS Web ADI深入浅出》.pdf
- QString::fromLocal8Bit()函数
- 互联网金融的前世、今生和未来-系列四(今生):百花齐放的互联网金融业态
- Ajax 什么是Ajax? Ajax的基本语法
- MongonDB下载、安装(Windows)、配置详解