最近准备入其他坑位。在面试过程中,遇到下面这题笔试题,拿出来分享分享。

题目:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如“我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分割中英文,并且中文不能分割一半?相关推荐

  1. java 实现汉字转换拼音_Java实现汉字转换为拼音

    # re: Java实现汉字转换为拼音 2006-11-24 15:06 芦苇 JAVA将汉字转化成拼音的方法 /** *//** ################################## ...

  2. java 实现汉字转换拼音_JAVA实现汉字转拼音功能代码实例

    JAVA中汉字转拼音的方法并不复杂,可以使用pinyin4j包来实现. 一.下载pinyin4j的架包,并导入项目中,如下: 如果是maven项目,maven依赖如下: com.belerweb pi ...

  3. java 日期格式化 英文_Java SimpleDateFormat 中英文时间格式化转换

    SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类.它允许进行格式化(日期 -> 文本).解析(文本 -> 日期)和规范化. SimpleDateFor ...

  4. java显示汉字乱码怎么办_java中的汉字显示问号乱码怎么解决

    java中的汉字显示问号乱码怎么解决 发布时间:2020-06-23 22:16:38 来源:亿速云 阅读:97 作者:元一 java中的汉字显示问号乱码怎么解决?针对这个问题,今天小编总结了这篇文章 ...

  5. java什么变量用作英文_Java基础之变量-什么是变量

    什么是变量: 在计算机语言中用来存储计算结果或表示值 如何命名Java变量: 如同酒店会给每个房间起个性化的名字一样,程序中的变量也需要用合理的名字进行管理-变量名! 变量命名要符合以下规则: 首字母 ...

  6. java 数字翻译成英文_Java实现将数字日期翻译成英文单词的工具类实例

    本文实例讲述了Java实现将数字日期翻译成英文单词的工具类.分享给大家供大家参考,具体如下: package com.sunyard.etp.ag.util; import java.math.Big ...

  7. java 数字翻译成英文_Java实现数字日期翻译成英文单词的工具类案例分享

    这篇文章主要介绍了Java实现将数字日期翻译成英文单词的工具类,结合完整实例形式分析了Java日期转换与字符串操作相关实现技巧,需要的朋友可以参考下 本文实例讲述了Java实现将数字日期翻译成英文单词 ...

  8. java过滤汉字和英文,java判断及过滤汉字

    packagecom.test;importjava.util.regex.Matcher;importjava.util.regex.Pattern;public classTest { @org. ...

  9. java需要记住什么英文_JAVA英语面试题(苦涩的记忆)

    JAVA英语面试题(苦涩的记忆) (2010-01-30 14:59:02) 标签: 杂谈 java 英语面试题 2008-11-13 11:051.Tell me a little about yo ...

最新文章

  1. linux 必须掌握的60个命令
  2. python开发环境比较好_python开发环境比较好,python 集成开发环境哪个好
  3. Linux命令及Linux终端的20个趣事
  4. GDCM:获取SubSequence数据的测试程序
  5. javafx性能_对JavaFX Mobile应用程序进行性能分析
  6. linux 内核 网卡驱动 移植,Linux内核移植步骤_添加DM9000网卡驱动(设备树).docx
  7. php 和bootstrap,bootstrap4和bootstrap3的区别是什么
  8. VC++6.0快捷键
  9. [C语言]排序问题--我的解答
  10. 异速联:解决打印样式个性化设置
  11. 95后阿里P7晒出工资单:狠补了这个,真香…
  12. c语言斐波那契数列for循环数组,C语言斐波那契数列的四种实现方式—递归,迭代,数组,队列...
  13. ndk编译 toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe
  14. 数据库三范式简单理解
  15. MyBatis中设置事务自动提交
  16. 第六章 颠覆与重塑思维,大数据与思维革命
  17. Cannot access ‘state‘ before initialization
  18. 企业的考勤管理系统应该具备哪些功能!
  19. python语法错误类型_python常见报错类型和异常处理
  20. 安诺伦代理iduron品牌——为学术研究和制药行业提供独特的糖胺聚糖产品系列

热门文章

  1. 将字符串中的每一个字母变成其下一个字母
  2. UART/USRAT协议
  3. 身份证照片比对,身份鉴别,人脸实名
  4. 一个字符串“0”,竟是B站崩溃的元凶...
  5. python编程锦囊pdf百度云_python编程锦囊 相关实例(示例源码)下载 - 好例子网
  6. oracle ebs web agent,《ORACLE EBS Web ADI深入浅出》.pdf
  7. QString::fromLocal8Bit()函数
  8. 互联网金融的前世、今生和未来-系列四(今生):百花齐放的互联网金融业态
  9. Ajax 什么是Ajax? Ajax的基本语法
  10. MongonDB下载、安装(Windows)、配置详解