- 浏览: 132071 次
- 性别:
- 来自: ...
文章分类
最新评论
最近接触到一道字符串截取的编程题:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个"。
了解Java的都知道Java中char是用Unicode-16表示的,char型占两个字节。通常采用Unicode-16的编码,一个代码单元就可以表示一个字符,极特殊的辅助字符需要一对代码单元来表示。String的length()方法返回的就是代码单元的数量。问题就在于汉字也好,普通字母数字也好基本上都是一个代码单元就能表示,所以无法区分。但是这些非西欧字符集虽然也是占两个字节,但是西欧字符的高8位是置0的,利用这个性质可以尝试写一个解决方案。
这里主要利用了int t = tmp & 0xff00截得字符的高8位进行判断,针对汉字这样的方案应该是可行的,如果是一些占有两个代码单元的,还要去使用找代码点的方法进行进一步的分割。
了解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位进行判断,针对汉字这样的方案应该是可行的,如果是一些占有两个代码单元的,还要去使用找代码点的方法进行进一步的分割。
发表评论
文章已被作者锁定,不允许评论。
-
一道位操作的趣味编程题
2010-03-14 10:50 2124看到一道很有意思的编程题:大厅里有64盏灯,每盏灯都编 ... -
一道多线程趣味热身题
2010-02-28 18:01 1960保持对知识点或者技术的熟悉度对于程序员至关重要,要学会 ... -
疑似Google多线程面试题的Java实现
2010-02-24 17:39 4964来到一个完全陌生的地方,即将一切从新开始,内心兴奋又忐 ... -
Mina的线程池实现分析(2)
2010-02-10 17:31 4590分析了I/O事件的存储,下面看看多个Worker同时工 ... -
Mina的线程池实现分析(1)
2010-02-10 17:28 11633线程池是并发应用中,为了减少每个任务调用的开销增强性能 ... -
多线程基础总结十一--ConcurrentLinkedQueue
2010-02-03 17:52 12952ConcurrentLinkedQueue充分使用了a ... -
LinkedBlockingQueue应用--生产消费模型简单实现
2010-01-29 20:45 8212之前介绍时LinkedBlockingQueue提到了 ... -
多线程基础总结十--LinkedBlockingQueue
2010-01-28 14:33 15443随着多线程基础总结的增多,却明显的感觉知道的越来越少, ... -
号称放倒一片的一道J2SE基础题的个人理解
2010-01-23 14:07 2847近日无意中看到一道Java基础题,号称在接受测试的10 ... -
多线程基础总结九--Mina窥探(1)
2010-01-21 23:46 5455一直以来的多线程的基础总结都是脱离应用的,但是要说多线 ... -
多线程基础总结八--ReentrantReadWriteLock
2010-01-15 23:22 7559说到ReentrantReadWriteLock,首先 ... -
多线程基础总结七--ReentrantLock
2010-01-09 23:17 7731之前总结了部分无锁机制的多线程基础,理想的状态当然是利 ... -
关于atomic问题的一点理解
2009-12-30 16:42 2486之前看到一个帖子是关于atomic使用的,当时没有仔细 ... -
多线程基础总结六--synchronized(2)
2009-12-18 18:45 1911早在总结一时,我就尽量的把synchronized的重点 ... -
多线程基础总结五--atomic
2009-12-17 19:46 3594在简单介绍java.util.c ... -
多线程基础总结四--ThreadLocal
2009-12-16 19:48 2763说到ThreadLocal,首先 ... -
多线程基础总结三--volatile
2009-12-15 20:09 2583前面的两篇总结简 ... -
多线程基础总结二--Thread
2009-12-12 23:27 2711对于Thread来说 ... -
多线程基础总结一--synchronized(1)
2009-12-12 23:23 3117最近写关于并发的小应 ... -
由destory-method引发的IOC容器设计的思考
2009-12-07 16:51 1724第一次读Spring的源 ...
相关推荐
java截取字符串,一道面试题。好像没有找到正确答案,今天找时间做了一个,仅供参考。本人运行过了。
标题中的“面试UC浏览器的一道处理字符串的题目”暗示了这是一个与编程相关的面试问题,特别是涉及到字符串处理。在Java编程语言中,字符串处理是基础且重要的技能,常常出现在面试题中,用来评估候选人的编程能力和...
本文将以“常见的Java上机面试题”为主题,深度剖析此类面试的核心要点,通过具体的实例,如字符串截取问题,来揭示解决常见Java编程挑战的方法。 #### Java上机面试的结构与目的 上机编程考试通常分为两个主要...
"js_leetcode题解之字符串字符最短路径_题解"这份资源包含了用JavaScript解答LeetCode上的一道关于字符串字符最短路径的问题。它涉及了字符串处理、动态规划或回溯法等关键概念,对于想要提升JavaScript算法能力的...
以下是一道典型的字符串截取面试题: **面试题1:怎样截取字符串** 该题要求编写一个函数,根据输入的字节数截取字符串,同时保证汉字不被分割。这个问题的关键在于理解Java中字符编码,尤其是中文字符占两个字节...
- 字符串处理:包括截取、删除、替换、拼接、翻转、搜索、移位等操作。 - 数据结构应用:如堆栈、队列、集合、哈希等辅助操作。 - 数学问题:如N进制减法。 - 算法应用:如矩阵最大值、最远足迹、字符串筛选排序等。...
6. **第六题**:字符串截取。涉及字符串操作和数组。 - 字符串复制:将原字符串中指定位置之外的字符复制到新字符串。 - 结尾添加字符串结束符:`b[j]='\0'`确保字符串的完整性。 7. **第七题**:找出数组中的...
这些题目涵盖了Java编程的基础知识,包括数学逻辑、循环、条件语句、递归、数组处理、字符串操作、算法和数据结构等。以下是针对这些题目所涉及的知识点的详细解释: 1. **兔子繁殖问题**:这是一道典型的斐波那契...
这是一道关于字符串数组排序的问题,要求对包含10个字符串的数组按照字典序进行排序。解决方案采用了经典的冒泡排序算法,其中`paixu`函数是排序的核心,通过两层嵌套的`for`循环比较并交换数组中的元素,利用`...
该Java编程题目旨在考察考生对于字符串操作、数组使用以及基本控制流程的理解。通过定义必要的常量和数组,再结合条件判断和循环结构,可以有效地实现阿拉伯数字到中文大写数字的转换。需要注意的是,部分代码片段...
这是一个关于字符串截取的问题。题目要求从原字符串中截取出指定索引范围内的子串。这里需要注意的是,索引是从0开始的,并且包括起始位置i和结束位置j。 **解题思路:** 实现该功能可以通过遍历原字符串,从索引i...
题目中的“2.6号面试题---编程”显然是一道关于字符串处理的编程挑战。让我们详细解析一下这个题目,并探讨相关的知识点。 首先,题目要求我们定义一个开关来判断是否允许汉字。这可能意味着我们需要一个布尔变量或...
在2012年的国信蓝桥杯四川赛区Java组竞赛中,最后一道大题考察了参赛者对基本算法的理解和应用能力,特别是对于数字操作、字符串处理以及循环结构的掌握。题目要求使用1至9这9个数字,通过任意加减运算的组合,使...
【华为实习练习题】涉及到多个编程题目,涵盖了字符串处理、递减数计算和社交网络信息传播的优化问题。 首先,让我们详细分析第一个题目——“密码截取”。这是一道关于字符串处理的问题,主要目标是从可能含有无关...
1. **字符串操作**:题目要求删除字符串中指定位置的字符,这涉及到字符串的截取和重组,以及字符数组的下标访问。 2. **字符数组的结束标志**:使用`'\\0'`作为字符串的结束标志,确保正确地构建和处理字符串。 ##...
3. 第824题:山羊拉丁文:这是一道关于字符串处理的题目。山羊拉丁文是一种变形的英语,遵循特定的规则。首先,单词根据字母表顺序分成五组(A, AEIOU, B-H, I-M, N-Z),然后每组内的单词按照原顺序保持不变。其次...
- **字符串截取**: 根据给定条件对字符串进行截取或处理。题目信息不完整,无法给出具体答案。但通常涉及字符串操作的基本方法,如字符串拼接、截取等。 以上是对给定文件信息中各题目知识点的详细解析。
1. 程序的输出结果是B.13,这是一道编程题,没有给出具体的编程语言,但根据选项,可能是对某个条件判断或循环的结果。 2. 实体可以表示具体和抽象的事物,B选项错误,实体既可以是具体对象,如人、物,也可以是...
试题可能要求对数组进行排序、查找、统计等操作,或者对字符串进行拼接、截取、查找子串等处理。 3. **函数与递归**: 函数是组织代码的基本单元,递归则是函数调用自身的一种方法。在一些复杂问题中,递归往往能...
12. 在VB6中,`LEFT`函数用于从字符串左侧截取指定长度的字符。 13. 回收站中的文件并非总是可以恢复,一旦清空回收站或者磁盘空间被覆盖,就可能无法恢复。 14. 面向对象设计方法强调使用现实世界的概念来抽象...