- 浏览: 1063743 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (501)
- dwr (6)
- javascript (84)
- oracle (66)
- jsp/servlet (18)
- ant (3)
- 基础知识 (12)
- EXT (10)
- My SQL (10)
- java (71)
- spring (37)
- 学习的对象 (2)
- Linux (24)
- 面试 (1)
- HTML/CSS (11)
- tomcat (11)
- 收藏夹 (2)
- Power Designer (2)
- struts.xml配置文件 (1)
- sturts2 (3)
- myeclipse (8)
- eclipse (7)
- Maven (34)
- SVN (3)
- SAP JCO (2)
- JBOSS (11)
- webservice (8)
- word (1)
- 敏捷开发 (1)
- sybase (4)
- Nexus (3)
- EhCache (3)
- log4j (3)
- Cookie (4)
- Session (4)
- CXF (7)
- AXIS (2)
- SSO (1)
- LDAP (1)
- velocity (2)
- Jquery (5)
- redis (2)
- http (4)
- dojo (1)
- Linux资源监控软件mnon的安装与运用 (1)
- notepad++ (1)
- EA (1)
- UML (1)
- JasperReports (1)
- 权限 (0)
- freemarker (4)
- Spring MVC (1)
- JMS (1)
- activeMQ (1)
- hession (3)
- 安全 (1)
- ibatis (2)
- log (1)
- nginx (1)
最新评论
-
winhbb:
我刚好遇到了一个问题(在可以依赖注入的场合有效):有两个模块A ...
解决Maven项目相互依赖/循环依赖/双向依赖的问题 -
nanjiwubing123:
long3ok 写道你好 XmlOutputFormatter ...
用XStream转换复杂XML -
zhoujianboy:
另外一个方法实现eclipse tomcat 热部署:http ...
eclipse下实现maven项目在tomcat容器热部署方法 -
long3ok:
你好 XmlOutputFormatter 请问这个类是在什么 ...
用XStream转换复杂XML -
ganbo:
总结的好,文章给力。
解决Maven项目相互依赖/循环依赖/双向依赖的问题
对于字符串的处理,经常会遇到需要判断字符是双字节还是单字节(或者全角和半角)的情况,因为双字节字符和单字节字符在屏幕上所占用的空间是不同的,通常情况下双字节字符占用的空间是单字节字符的两倍。比如,一个字符串,可能包含中文英文数字和各种符号等等,将其输出到屏幕上,需要根据长度判断在哪里进行截断(网页编程中经常用到)。
最常见的两种方式。
一种是通过String的getBytes().length来判断,单个字符构成的字符串,其getBytes().length若大于1,则为双字节字符,否则为单字节字符。不过需要注意的是,这种方式有一定缺陷,就是当使用英文操作系统来执行getBytes().length这句代码的时候,单字节双字节文本得到的结果是一样的。这是因为不同的JAVA虚拟机对于字符的处理方式不同。所以,虽然这种方法很简单,而且在大多数时候很有效,但是考虑到可能会有少部分使用英文操作系统的人,还是建议用下一种方法。
另外一种是通过判断某一位的字符是否大于0x80,如果大于则为双字节字符,否则为单字节字符。
最常见的两种方式。
一种是通过String的getBytes().length来判断,单个字符构成的字符串,其getBytes().length若大于1,则为双字节字符,否则为单字节字符。不过需要注意的是,这种方式有一定缺陷,就是当使用英文操作系统来执行getBytes().length这句代码的时候,单字节双字节文本得到的结果是一样的。这是因为不同的JAVA虚拟机对于字符的处理方式不同。所以,虽然这种方法很简单,而且在大多数时候很有效,但是考虑到可能会有少部分使用英文操作系统的人,还是建议用下一种方法。
另外一种是通过判断某一位的字符是否大于0x80,如果大于则为双字节字符,否则为单字节字符。
/**编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 * 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6, * 应该输出为"我ABC"而不是"我ABC+汉的半个" * @param str * @param byteLength * @return */ private static String getStringByInputStringAndLength(String str,int byteLength) { // int byteCount = 0;//字节计数 // int charCount = 0;//字符计数 // for(int i=0;i<byteLength;i++) // { // charCount++; // String strTemp = String.valueOf(str.charAt(i)); // int currentByteNum = strTemp.getBytes().length; // if(currentByteNum==2) // { // byteCount+=2; // } // else if(currentByteNum==1) // { // byteCount+=1; // } // if(byteCount>byteLength) // { // charCount--; // break; // } // } // System.out.println("num:"+charCount); // return str.substring(0, charCount); int byteCount = 0;//字节计数 int charCount = 0;//字符计数 for(int i=0;i<byteLength;i++) { charCount++; int charIndex = (int)str.charAt(i); System.out.println("charIndex:"+charIndex); // int currentByteNum = strTemp.getBytes().length; if(charIndex > 128) { byteCount+=2; } else { byteCount+=1; } if(byteCount>byteLength) { charCount--; break; } } System.out.println("num:"+charCount); return str.substring(0, charCount); }
发表评论
-
个人草稿使用
2017-08-19 09:02 0深入理解JVM: http://www.cnblogs.co ... -
Thread.setDaemon详解
2015-04-24 21:31 902java中线程分为两种类型:用户线程和守护线程。通过Threa ... -
怎么使用 ConcurrentHashMap 才能是线程安全的?
2015-04-13 11:54 1506public class test { public ... -
21,tomcat关闭钩子
2014-12-31 10:36 726在很多环境下,在关闭应用程序的时候需要做一些清理工作。问题在于 ... -
Java NIO使用及原理分析 (一) 【转载】
2014-10-24 00:04 487【转载】: http://blog.csdn.net/wuxi ... -
Java 两个集合取交集
2014-10-14 21:16 3134public static Set intersectionS ... -
Calendar类roll和add的区别
2014-10-10 22:28 492import java.text.SimpleDateForm ... -
Gson通过借助TypeToken获取泛型参数的类型的方法
2014-09-30 00:26 629[size=medium]最近在使用Goo ... -
HashMap的遍历效率讨论
2014-09-27 20:41 832经常遇到对HashMap中的key和value值对的遍历操作, ... -
Java 泛型
2014-06-26 12:44 857关键字说明 ? 通配符类型 <? extends T&g ... -
Java泛型集合的理解
2014-06-26 00:05 507[size=medium]什么是泛型? 泛型(Generic ... -
关于java字节码框架ASM的学习
2014-06-19 19:22 887一、什么是ASM ASM是一个java字节码操纵框架, ... -
Java动态代理详解
2014-06-19 17:41 860Java动态代理详解: http: ... -
Java内存,字符串文章收集
2014-06-18 16:24 731java--String常量池问题的几个例子 . http:/ ... -
Java内存解析
2014-06-18 11:48 778栈、堆、常量池等虽同 ... -
Java的堆与非堆内存
2014-01-07 10:59 718堆(Heap)和非堆(Non-heap)内存 按照官方的说法: ... -
JMX 资料收集
2014-01-07 10:53 459JavaSky的专栏 http://blog.csdn.net ... -
JAVA 注解示例 详解
2013-11-12 09:36 824注解(Annotation) 为我们在代码中天界信息提供了 ... -
Java 泛型详解
2013-11-11 22:35 818http://www.360doc.com/content/1 ... -
Java中的Enum的使用与分析
2013-11-09 12:49 817enum枚举类型:在实际问 ...
相关推荐
Delphi判断双字节,用法简单,在窗口输入框中输入字符串,单击按钮即可,程序会判断出是否包含有双字节字符,判断方法请看下边的代码段: s := Edit1.Text; i := 0; while i begin if (ByteType(S,i) <> ...
在ASCII编码中,每个字符只需要一个字节(8位)来表示,因此称为单字节字符。这包括英文字符、数字、标点符号等。然而,对于包含多种语言和复杂字符集的Unicode编码,一个字符可能需要两个字节或更多来表示,比如...
如果截取操作结束于一个字符的中间(即数组索引为奇数的位置),并且该字节的值小于等于0(表明这是UTF-16中的第二个字节),则代码会去除这个字节,确保字符串完整性。 #### 总结 通过上述分析,我们可以看到,按...
另一方面,`System.Text.Encoding.Unicode`通常指的是UTF-16编码,它总是使用两个字节来表示每个Unicode字符,无论这个字符是单字节还是双字节。因此,使用`Encoding.Unicode.GetBytes(s)`转换字符串时,所有字符...
这段代码首先获取了字符的ASCII码,然后根据码值范围判断字符类型。然而,需要注意的是,易语言处理中文字符时,由于中文字符通常占用两个字节(双字节字符),所以使用ASCII码进行判断并不准确。在易语言中,处理...
Flex中的maxChars属性默认是按照单字节字符来计数的,这在处理英文等语言时是没有问题的,因为每个字符通常占用一个字节。但是对于双字节字符集的语言,每个字符可能占用两个甚至更多字节。因此,如果仅使用maxChars...
`ByteType` 是一个用于确定字符串中某个字符字节类型的函数。它返回一个枚举值,该枚举值表示了特定位置上字符的字节类型。在 Delphi 中,`ByteType` 的定义如下: ```pascal function ByteType(const S: string; ...
处理DBCS字符串时,可以使用特定的函数,例如`CharNext`和`CharPrev`来获取字符串中下一个或上一个字符的地址,以及`IsDBCSLeadByte`来判断字节是否为双字节字符的第一个字节。 3. 使用Unicode的原因: - 数据交换...
- **iswcntrl()**:判断一个宽字符是否为控制字符。 - **iswdigit()**:判断一个宽字符是否为数字。 - **iswgraph()**:判断一个宽字符是否为打印图形字符。 - **iswlower()**:判断一个宽字符是否为小写字母。 - **...
对于GB2312编码,一个中文字符由两个字节组成,前一个字节的范围在161(0xA1)到254(0xFE)之间,后一个字节的范围在161(0xA1)到254(0xFE)之间。对于GBK和UTF-8编码,中文字符的表示方式更复杂,但同样可以通过...
1. **Left() 函数**:返回一个字符串左端的指定数量的字符。 - `Left(string, length)` - `string`:要提取的字符串。 - `length`:要返回的字符数。 2. **Mid() 函数**:返回字符串中指定位置的子字符串。 - `...
在C#编程语言中,经常需要处理字符串操作,其中一个常见的需求就是根据特定的长度来截取字符串。本文将详细介绍如何使用C#实现字符串的固定长度截取,并深入探讨背后的原理和技术细节。 #### 方法一:使用Substring...
2. **堆栈段**(Stack Segment):这部分定义了一个大小为128个字节的堆栈区域,用于临时存放数据或函数调用过程中的信息。 3. **代码段**(Code Segment):这是程序的核心部分,包含了主要的逻辑处理过程。 ####...
对于单字节字符(如英文、数字),我们可以直接通过ASCII码(American Standard Code for Information Interchange)来判断其类型。ASCII码是一个7位的二进制编码,用于表示128种不同的字符,包括大小写字母和数字。...
3. 字节序列分析:判断一个字符串是否为UTF-8,需要检查每个字节的最高位。在易语言中,可以通过“取字节”命令获取字符串中每个字节的值,然后根据UTF-8的字节规则进行验证。 4. 错误处理:在处理编码问题时,可能...
ASCII码中的每个字符都可以用一个字节(8位)来表示,但最左边的一位通常设置为0,这样就形成了7位的有效编码空间。例如,大写字母"A"的ASCII值是65(二进制01000001)。 然而,ASCII码不足以涵盖所有语言的字符,...
这个问题在给定的代码中得到了解决,通过定义了一个名为`cn_substr`的函数,实现了中文字符串的单字节截取模式。 `cn_substr`函数接受三个参数:要截取的字符串`$str`,目标长度`$slen`以及起始位置`$startdd`。这...
- 使用 `left()` 和 `leftA()` 函数获取每个字符的第一个字节,判断其是否为中文字符。中文字符的两个字节的第一个字节与 `leftA()` 获取的字符相同,而英文字符的两个字节的第一个字节不同。 - 对于英文字符,将...