Java:根据字节数截取字符串,但是汉字不能截取半个。
截取字符串指定指定字节数的内容,如果指定的字节数在汉字的中间,汉字不能截取部分,只截取前面的内容。
package com.lcx.test;import java.io.UnsupportedEncodingException;
/*** *
截取字符串指定指定字节数的内容,如果指定的字节数在汉字的中间,汉字不能截取部分,只截取前面的内容。
如"ab我",截取3个字节的字符,如果采用非iso-8859-1编码 汉字所占字符超过1个字节,所以此时只能截取"ab" 。
题目意思: 应该是字符串中不存在乱码的情况下,如果编码形式是iso-8859-1,那么截取字符串就是截取的字节格式,
所以主要考核的是非iso-8859-1编码格式是如何截取。 思路:
假设截取 n个字节,
截取字符串的n个字符,n个字符的GBK编码的字节数一定>=要截取字节个数,如果等于说明全是字母
如果不等,说明包含汉字,截取的n个字符的字节数>需要截取的n个字节,故截取字符n-1,
再次进行比较,直到,字节数n 和 截取字符串的字节数相等,那么所截取的字符串就是结果。 * @author**/
public class SubStringByBytes {/*** @param args* @throws UnsupportedEncodingException*/public static void main(String[] args) throws UnsupportedEncodingException {String en = "a";String cn = "我";System.out.println("英文_ISO-8859-1:" + en.getBytes("ISO-8859-1").length);System.out.println("汉字_ISO-8859-1:" + cn.getBytes("ISO-8859-1").length);System.out.println("英文_GBK:" + en.getBytes("GBK").length);System.out.println("汉字_GBK:" + cn.getBytes("GBK").length);System.out.println("英文_UTF-8:" + en.getBytes("UTF-8").length);System.out.println("汉字_UTF-8:" + cn.getBytes("UTF-8").length);String str = "abc我们啊ddd";/** 这里还和截取何种编码的字节数有关,如果截取9个字节* GBK 是 abc我们啊* UTF8是 abc我们*/System.out.println(subStringByBytes(str, 9,"gbk"));System.out.println(subStringByBytes(str, 9,"utf-8"));}/*** * @param str 要截取的字符串* @param bytes 截取的字节数* @return* @throws UnsupportedEncodingException*/public static String subStringByBytes(String str, int bytes,String charSetName) throws UnsupportedEncodingException {String subAfter = str.substring(0, bytes);int temp = bytes;try {//直到截取的字符串的字节数 和 需要的 截取的字节数相等位为止while(bytes < subAfter.getBytes(charSetName).length){subAfter = subAfter.substring(0,--temp );}} catch (UnsupportedEncodingException e) {e.printStackTrace();}return subAfter;}/*** * @return 当前系统的编码格式 */public static String getSystemEncode() {System.getProperties().list(System.out);// 得到当前的系统属性。并将属性列表输出到控制台String encoding = System.getProperty("file.encoding");System.out.println("Encoding:" + encoding);return encoding;}
}
重点就是要区分英文单个字符串和汉字单个字符串的不同,在非iso-8859-1的情况下都不相同,这样就可以进行区分了。
结果截图:
汉字在各种编码下所占字节数请见:
http://www.cnblogs.com/lancidie/archive/2013/04/12/3017241.html
Java:根据字节数截取字符串,但是汉字不能截取半个。相关推荐
- Java按字节数截取字符串
最近在开发的过程中遇到的问题,接口要求传入参数在255个字节以内(GBK),但是入参是一个既有中文又有英文的字符串,所以需要按字节截取,翻了半天也没找到有现成的方法,于是选择了这样一种方法实现. /* ...
- java 半个汉字,Java截取字符串军令状汉字不被截取半个
Java截取字符串保证汉字不被截取半个 Java截取字符串保证汉字不被截取半个 public class SplitString { public static void main(String[] ...
- js截取字符串区分汉字字母代码
js截取字符串并且区分汉字字母,一个汉字辨别为两个字节. function substr(str, len) {if (!str || !len) {return '';}// 预期计数:中文2字节, ...
- java如何使截取字符串_java中如何截取字符串中的指定一部分
java中如何截取字符串中的指定一部分 关注:136 答案:4 mip版 解决时间 2021-02-06 13:27 提问者妳涐執唸汰深 2021-02-06 08:56 精选 比如 F:\wor ...
- java 根据特殊字符截取字符串_java中如何截取特殊字符串
展开全部 给你推荐java 字符e69da5e6ba903231313335323631343130323136353331333365653739串截取的三种方法:split()+正则表达式来进行截 ...
- 字符和字节详解、Java中字节串和字符串相互转换
字符.字节和编码 1. 程序中的字符与字节 字节是规定存储大小的存储单位,规定为8位一字节(8bit = 1 byte). 字符是人类的描述符号.存储在计算机时,不同的编码格式会有不同的字节组合,一般 ...
- java 字符字节数组_Java字符串与字符、字节数组知识点总结
(1)用字符数组创建字符串对象,String类中有两个有字符数组创建字符串对象的构造的方法: String(char [ ])该构造方法用指定的字符数组创建构造一个字符串对象: String (cha ...
- java中字节数组转换为字符串
1.字节数组转换为字符串 byte[] byBuffer = new byte[20]; ... ... String strRead = new String(byBuffer); strRead= ...
- php 按 截取字符串,PHP按符号截取字符串的指定部分
字符串截取在php开发中是比较常用的: 而且对于截取的需求也有很多种: 就比如说对url链接的操作:http://baijunyao.com/article/12 有时我们想截取最后一个斜杠'/'后面 ...
- 在html中如何截取字符串,javascript中如何截取字符串?
JavaScript中截取字符串有三种方法,分别是substring(),substr(),split().下面本篇文章就来给大家介绍一下它们的使用方法,希望对大家有所帮助. 方法1:使用substr ...
最新文章
- Template mode HTML5 has not been configured
- python打印表格_使用 Python 打印漂亮的表格,这两项基本功你可会?
- 阿里云服务器常见用语
- Boost::context模块fiber的分段的测试程序
- [Android] DownloadManager下载管理类2.3新增API介绍
- C语言程序练习-L1-023 输出GPLT (20分)
- fastjson反序列化漏洞原理及利用
- 第七期:详解JavaScript运行机制(Event Loop)
- django-删除学生数据
- 数据脱敏和加密_Apache ShardingSphere数据脱敏全解决方案详解
- 9行Python代码搭建神经网络来掌握一些基本概念
- Zookeeper-Zookeeper可以干什么
- Python3 人脸识别 源码
- FileZilla Server图文安装教程
- android sns空间代码,Android视频分享SNS类APP完整源码(服务端+客户端)
- vue中computer和watch的区别和使用
- 前端实习日记(6月前两周)
- 怎样将优酷视频编码KUX转MP4视频格式
- mbr分区磁盘如何转换成gpt分区磁盘?
- 20. Converting Dotted Decimal to Prefix Notation
热门文章
- 量子算法入门书籍推荐
- PHP请求一次网页前端浏览一次后端会出现两次请求次数的原因和解决方法。
- STM32H743+CubeMX-ADC(16bit分辨率)+DMA采样三路模拟量,硬件过采样器实现1024倍过采样
- 河南理工大学计算机课d,河南理工大學计算机基础课后习题答案.doc
- Spring Boot笔记-@ExceptionHandler拦截500服务器错误自定义数据回前端
- Linux学习笔记-调用pthead_create创建线程
- C++工作笔记-对二级指针的进一步理解(函数的参数使用二级指针,从而操作原数据)
- C++ STL string的构造函数
- 计算机组成原理个人笔记(三)
- C/C++ OpenCV方框滤波