`
ftj20003
  • 浏览: 132058 次
  • 性别: Icon_minigender_1
  • 来自: ...
社区版块
存档分类
最新评论

一道字符串截取的编程题

    博客分类:
  • Java
阅读更多
    最近接触到一道字符串截取的编程题:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个"。
   
    了解Java的都知道Java中char是用Unicode-16表示的,char型占两个字节。通常采用Unicode-16的编码,一个代码单元就可以表示一个字符,极特殊的辅助字符需要一对代码单元来表示。String的length()方法返回的就是代码单元的数量。问题就在于汉字也好,普通字母数字也好基本上都是一个代码单元就能表示,所以无法区分。但是这些非西欧字符集虽然也是占两个字节,但是西欧字符的高8位是置0的,利用这个性质可以尝试写一个解决方案。
/**
 * @author: yanxuxin
 * @date: 2010-3-10
 */
public class SplitString {

	public static void main(String[] args) {
		splitStr("我ABC", 4);
		splitStr("我ABC汉DEF", 6);
	}

	public static void splitStr(String s, int bytes) {
		int offset = 0; //计算位数偏移量
		int i = 0; //统计实际代码单元数
		for (; i < s.length(); i++) {
			char tmp = s.charAt(i);
			
			int t = tmp & 0xff00; //截取高8位进行判断
			if (t > 0) {
				offset += 2;
			}
			else {
				offset++;
			}
			
			if (offset >= bytes) {
				if (offset == bytes) {
					i++;
				}
				break;
			}
		}
		System.out.println("Result=" + s.substring(0, i));
	}
}

    这里主要利用了int t = tmp & 0xff00截得字符的高8位进行判断,针对汉字这样的方案应该是可行的,如果是一些占有两个代码单元的,还要去使用找代码点的方法进行进一步的分割。
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    java截取字符串程序,一道面试题。答案

    java截取字符串,一道面试题。好像没有找到正确答案,今天找时间做了一个,仅供参考。本人运行过了。

    面试UC浏览器的一道处理字符串的题目(已提供答案)

    标题中的“面试UC浏览器的一道处理字符串的题目”暗示了这是一个与编程相关的面试问题,特别是涉及到字符串处理。在Java编程语言中,字符串处理是基础且重要的技能,常常出现在面试题中,用来评估候选人的编程能力和...

    常见的Java上机面试题

    本文将以“常见的Java上机面试题”为主题,深度剖析此类面试的核心要点,通过具体的实例,如字符串截取问题,来揭示解决常见Java编程挑战的方法。 #### Java上机面试的结构与目的 上机编程考试通常分为两个主要...

    js-leetcode题解之字符串字符最短路径-题解.zip

    "js_leetcode题解之字符串字符最短路径_题解"这份资源包含了用JavaScript解答LeetCode上的一道关于字符串字符最短路径的问题。它涉及了字符串处理、动态规划或回溯法等关键概念,对于想要提升JavaScript算法能力的...

    讲座资料(2021年-2022年收藏的常见的Java上机面试题.doc

    以下是一道典型的字符串截取面试题: **面试题1:怎样截取字符串** 该题要求编写一个函数,根据输入的字节数截取字符串,同时保证汉字不被分割。这个问题的关键在于理解Java中字符编码,尤其是中文字符占两个字节...

    华为OD机考小结+算法编程试题一遍过

    - 字符串处理:包括截取、删除、替换、拼接、翻转、搜索、移位等操作。 - 数据结构应用:如堆栈、队列、集合、哈希等辅助操作。 - 数学问题:如N进制减法。 - 算法应用:如矩阵最大值、最远足迹、字符串筛选排序等。...

    南开c编程100题答案

    6. **第六题**:字符串截取。涉及字符串操作和数组。 - 字符串复制:将原字符串中指定位置之外的字符复制到新字符串。 - 结尾添加字符串结束符:`b[j]='\0'`确保字符串的完整性。 7. **第七题**:找出数组中的...

    java编程题

    这些题目涵盖了Java编程的基础知识,包括数学逻辑、循环、条件语句、递归、数组处理、字符串操作、算法和数据结构等。以下是针对这些题目所涉及的知识点的详细解释: 1. **兔子繁殖问题**:这是一道典型的斐波那契...

    西工大c语言实验100题06

    这是一道关于字符串数组排序的问题,要求对包含10个字符串的数组按照字典序进行排序。解决方案采用了经典的冒泡排序算法,其中`paixu`函数是排序的核心,通过两层嵌套的`for`循环比较并交换数组中的元素,利用`...

    一道java题

    该Java编程题目旨在考察考生对于字符串操作、数组使用以及基本控制流程的理解。通过定义必要的常量和数组,再结合条件判断和循环结构,可以有效地实现阿拉伯数字到中文大写数字的转换。需要注意的是,部分代码片段...

    常考的算法题,C&C++

    这是一个关于字符串截取的问题。题目要求从原字符串中截取出指定索引范围内的子串。这里需要注意的是,索引是从0开始的,并且包括起始位置i和结束位置j。 **解题思路:** 实现该功能可以通过遍历原字符串,从索引i...

    2.6号面试题---编程

    题目中的“2.6号面试题---编程”显然是一道关于字符串处理的编程挑战。让我们详细解析一下这个题目,并探讨相关的知识点。 首先,题目要求我们定义一个开关来判断是否允许汉字。这可能意味着我们需要一个布尔变量或...

    国信蓝桥杯四川赛区2012年java组最后一道大题详解

    在2012年的国信蓝桥杯四川赛区Java组竞赛中,最后一道大题考察了参赛者对基本算法的理解和应用能力,特别是对于数字操作、字符串处理以及循环结构的掌握。题目要求使用1至9这9个数字,通过任意加减运算的组合,使...

    2015华为实习练习题

    【华为实习练习题】涉及到多个编程题目,涵盖了字符串处理、递减数计算和社交网络信息传播的优化问题。 首先,让我们详细分析第一个题目——“密码截取”。这是一道关于字符串处理的问题,主要目标是从可能含有无关...

    c语言上机题库

    1. **字符串操作**:题目要求删除字符串中指定位置的字符,这涉及到字符串的截取和重组,以及字符数组的下标访问。 2. **字符数组的结束标志**:使用`'\\0'`作为字符串的结束标志,确保正确地构建和处理字符串。 ##...

    java-leetcode题解之第824题山羊拉丁文.zip

    3. 第824题:山羊拉丁文:这是一道关于字符串处理的题目。山羊拉丁文是一种变形的英语,遵循特定的规则。首先,单词根据字母表顺序分成五组(A, AEIOU, B-H, I-M, N-Z),然后每组内的单词按照原顺序保持不变。其次...

    2021-2022计算机二级等级考试试题及答案No.14299.docx

    - **字符串截取**: 根据给定条件对字符串进行截取或处理。题目信息不完整,无法给出具体答案。但通常涉及字符串操作的基本方法,如字符串拼接、截取等。 以上是对给定文件信息中各题目知识点的详细解析。

    2021-2022计算机二级等级考试试题及答案No.14024.docx

    1. 程序的输出结果是B.13,这是一道编程题,没有给出具体的编程语言,但根据选项,可能是对某个条件判断或循环的结果。 2. 实体可以表示具体和抽象的事物,B选项错误,实体既可以是具体对象,如人、物,也可以是...

    NOIP2017普及组复赛试题讲解(c++版本).ppt

    试题可能要求对数组进行排序、查找、统计等操作,或者对字符串进行拼接、截取、查找子串等处理。 3. **函数与递归**: 函数是组织代码的基本单元,递归则是函数调用自身的一种方法。在一些复杂问题中,递归往往能...

    2021-2022计算机二级等级考试试题及答案No.3520.docx

    12. 在VB6中,`LEFT`函数用于从字符串左侧截取指定长度的字符。 13. 回收站中的文件并非总是可以恢复,一旦清空回收站或者磁盘空间被覆盖,就可能无法恢复。 14. 面向对象设计方法强调使用现实世界的概念来抽象...

Global site tag (gtag.js) - Google Analytics