在网上看到一个考试题,做了试试看的,发现网上给的很多答案并不完全标准,不完全符合题目要求。题目如下:
编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC4”,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
package main;
/**
* @author H小阿飞
*/
public class SplitChar {
/**
在UTF-8字符集中一个中文字
占2个字节的:0个
占3个字节的:基本等同于GBK,含21000多个汉字
占4个字节的:中日韩超大字符集里面的汉字,有5万多个
*/
public void splitIt(String str,int bytes){
char[] getChar = str.toCharArray(); //字符串以字符数组的形式存储
int charLength = getChar.length;
System.out.println("字符数组的长度:"+charLength);
int k = 0;
String reStr = "";
for(int i=0;i<charLength&&bytes>k;i++){ //bytes>k 用来限制循环的条件。形象点讲:bytes相当于一个剪切点,k从字符串数组起点游动寻找此bytes点。
String s1 = String.valueOf(getChar[i]); //获取字符串数组中的字符并转换成String型
byte[] getBytes = s1.getBytes(); //字符串数组中的字符串以字节数组的形式存储
if(getBytes.length==3){ //为了应付题目,把一个汉字当做2个字节
k += getBytes.length-1;
}else{
k += getBytes.length;
}
if(k<=bytes){ //处理如:"a我",2的情况,只输出"a",而不是"a我"
reStr += getChar[i];
}
}
System.out.println("截取后所需的字符串:"+reStr);
}
public static void main(String[] args){
String input = " a我b是c一d个e中f国g人";
String number = "7";
int num = Integer.valueOf(number);
SplitChar splitChar = new SplitChar();
splitChar.splitIt(input,num);
}
}
注:题目本身并不完善,因为它认为一个中文字是两个字节的,而且我们平时也都是认为一个中文汉字是两个字节,一个英文字母是一个字节,但在UTF-8字符集下,中文汉字其实是3个字节,这也是我做了这条题目后才发现的。
对此我有个疑问:那在何种情况下一个中文字是两个字节呢?
应题目要求,我对中文字节数减了1,完全按照题目意思去写的代码。
下面的附近是对此进行了扩展,多了一个按字符截取字符串的功能
分享到:
相关推荐
在C#编程中,有时我们需要根据字节长度来截取字符串,这可能是因为要处理不同编码格式的数据,或者为了适应特定的传输限制。本篇将详细介绍如何在C#中按照字节长度截取字符串,并结合正则表达式进行操作。 首先,...
了解这些方法后,我们就可以灵活地根据需求截取字符串中的特定字节数部分了。但要注意,字节截取可能会涉及到字符编码问题,因此在实际操作时要特别留意编码格式,避免出现乱码或者截取不完整的情况。
在C#编程中,有时我们需要根据特定的字节数来截取字符串,并在截取后添加省略号以便表示被省略的内容。本篇将详细讲解如何实现这一功能。 首先,我们要理解字符串在不同的编码环境下可能会占用不同数量的字节。例如...
最近需要用到按字节数截取字符串。在网上找了很多方法。 Encoding.Default.GetString采用的Default Encoding.UTF8.GetBytes采用的是utf-8编码。这样当然是乱码。尤其出现中文时候。 对这类数据处理当然要用统一的...
在ASP.NET C#开发环境中,处理字符串是一项常见且重要的任务,尤其是在需要对字符串进行精确控制的情况下,如按字节截取字符串。本文将详细介绍如何为C#中的`String`类添加一个扩展方法,该方法允许我们按照字节而非...
实现一个按字节来截取字符串的方法,功能类似于string类的substring方法,String类是按字符截取 的,例如"中国abc".substring(1,3),将返回“国a”。这里 要求按字节截取,一个英文字符当一个字节,一个中文字符当两...
"JAVA按照字节截取字符串" JAVA按照字节截取字符串是Java编程语言中的一项重要技术,通过本文,我们将详细介绍如何使用Java语言按照字节截取字符串。 首先,我们需要了解什么是字节截取。在计算机科学中,字节是...
首先,理解为什么需要按照字节长度而不是字符长度截取字符串。在处理非ASCII字符(如中文、日文等)时,一个字符可能占用多个字节。如果单纯按字符长度截取,可能会导致截取到半字符,从而破坏字符串的读取。因此,...
在 `main` 方法中,我们创建了一个 `SplitString` 对象,并调用其 `SplitIt` 方法来截取字符串。 总结 本例中,我们实现了一个 Java 字符串截取函数,该函数可以截取指定字节的字符串,并保证汉字不被截半个。该...
本文将深入探讨一种按字节截取字符串的方法,并通过分析一个具体的Java代码示例来解释其实现原理。 #### 核心概念:Unicode与字节 在讨论字符串按字节截取之前,我们首先需要理解几个基础概念。现代计算机系统中,...
这就意味着当我们按照字节长度截取字符串时,可能会将一个完整的汉字分割成两部分,从而导致乱码。 Java中的`String`类提供了多种截取字符串的方法,如`substring()`、`subSequence()`等,但它们都是基于字符(char...
在某些场景下,我们可能需要按照特定的字节数来截取字符串,比如在网络传输、数据解析或编码转换时。本篇文章将详细探讨“按byte截取字符串”这一技术点,并通过两个Java文件——SliceByByteTest.java和SliceByByte....
### ASP.NET 截取字符串方法详解 在ASP.NET开发中,有时我们需要对字符串进行截取操作,特别是当涉及到多字节字符(如中文)时,简单的字符串截取可能会导致乱码问题。本文将详细介绍一种使用字节精确计算的ASP.NET...
在自动化和工业控制领域,TIA博途( Totally Integrated Automation...以上就是在TIA博途中,字符转换为字符串以及截取字符串有效字符的具体方法。理解并熟练运用这些技术,能帮助我们在处理通信数据时更加高效和准确。
然而,截取字符串时,如果不注意,可能会因为字节对齐的问题导致字符被错误地分割。例如,如果一个中文字符被截断在两个字节之间,那么在显示时就会出现乱码。 要实现安全的混合字符串截取,我们可以使用Delphi内置...
本文实例讲述了Go语言按字节截取字符串的方法。分享给大家供大家参考。具体实现方法如下: 代码如下:// 按字节截取字符串 utf-8不乱码 func SubstrByByte(str string, length int) string { bs := []byte(str)[:...
本题中,我们需要编写一个函数,该函数能够根据指定的字节数截取字符串,并确保不会出现汉字被截半的情况。这是一个涉及字符编码和边界条件处理的问题。 首先,我们来理解题目中的要求: 1. 函数接收两个参数,一个...
一般截取字符串是按照字符截取的,现在这个代码是按照字节截取字符