文档章节

【Android】全角字符半角字符工具类

t
 timeyoyo
发布于 2016/05/13 13:58
字数 295
阅读 234
收藏 0
package a.b.c;

/** 
 * 半角、全角文字处理工具类 
 *  
 */  
public class DbcSbcUtils {  
  
    /** 
     * 半角、全角字符判断 
     *  
     * @param c 
     *            字符 
     * @return true:半角; false:全角 
     */  
    public static boolean isDbcCase(char c) {  
        // 基本拉丁字母(即键盘上可见的,空格、数字、字母、符号)  
        if (c >= 32 && c <= 127) {  
            return true;  
        }  
        // 日文半角片假名和符号  
        else if (c >= 65377 && c <= 65439) {  
            return true;  
        }  
        return false;  
    }  
  
    /** 
     * 字符串长度取得(区分半角、全角) 
     *  
     * @param str 
     *            字符串 
     * @return 字符串长度 
     */  
    public static int getLength(String str) {  
        int len = 0;  
        for (int i = 0; i < str.length(); i++) {  
            char c = str.charAt(i);  
            if (isDbcCase(c)) { // 半角  
                len = len + 1;  
            } else { // 全角  
                len = len + 2;  
            }  
        }  
        System.out.println("#### LEN ="+len);  
        return len;  
    }  
  
    /** 
     * 字符串截取(区分半角、全角) 
     *  
     * @param str 
     *            字符串 
     * @param limit 
     *            长度 
     * @return 
     */  
    public static String getPatStr(String str, int limit) {  
        if (getLength(str) <= limit) {
            return str;
        }
//        limit = limit - 4;
        char[] chars = str.toCharArray();  
        int charLenSum = 0;  
        String result = "";  
        for (int i = 0; i < chars.length; i++) {  
            int charLen = isDbcCase(chars[i]) ? 1 : 2;  
            if (charLenSum + charLen > limit) {  
                return result + "...";  
            }  
            charLenSum += charLen;  
            result += chars[i];  
            if (charLenSum == limit) {  
                return result + "...";  
            }  
        }  
        return "";  
    }  
    
  
    public static void main(String[] args) {  
        System.out.println(getPatStr("全角文字", 10));  
        System.out.println(getPatStr("全角文字判", 10));  
        System.out.println(getPatStr("全角文字12", 10));  
        System.out.println(getPatStr("全角文字123", 10));  
        System.out.println(getPatStr("12345678901234567890", 14));  
        System.out.println(getPatStr("一二三四五六七八九十", 14));  
    }  
}  

 

© 著作权归作者所有

t
粉丝 3
博文 38
码字总数 10005
作品 0
南京
私信 提问
解决TextView排版自动换行问题

今天忽然发现android项目中的文字排版参差不齐的情况非常严重,不得不想办法解决一下。经过研究之后,终于找到了textview自动换行导致混乱的原因了----半角字符与全角字符混乱所致!一般情况...

九洲北研
2013/08/15
902
1
iOS开发·必会的算法操作:字符串数组排序+模型对象数组排序

前面的话 为了给字符串数组排序,除了用C/C++的基本办法,iOS开发者更应该学会利用苹果专门为NSArray 排序提供的sortedArrayUsingComparator 方法: 其中,需要设置一个NSComparator 参数,它...

陈满iOS
2017/12/20
0
0
python实现全角半角的相互转换

在自然语言处理过程中,全角、半角的的不一致会导致信息抽取不一致,因此需要统一。 转换说明 全角半角转换说明 有规律(不含空格): 全角字符unicode编码从65281~65374 (十六进制 0xFF01...

_周小董
2018/05/14
0
0
【转载】 C#中全角转半角以及半角转全角

半角指的是一个字符占用一个标准字符的位置。全角指一个字符占用两个标准字符位置的状态。在C#中,我们可以通过程序的方法,将相应的半角字符串信息转换为全角类型,也可以实现全角转半角功能...

江湖逍遥
03/13
0
0
C# 中按字节数截取字符串

在C#语言中,按字符数截取字符串可采用String类的SubString方法实现,但很多情况下,我们需要按字节数截取字符串。 举例来说,现有一行文字,屏幕上需要展示的界面宽度有限,但文字的总长度可...

北风其凉
2016/05/23
333
0

没有更多内容

加载失败,请刷新页面

加载更多

可见性有序性,Happens-before来搞定

写在前面 上一篇文章并发 Bug 之源有三,请睁大眼睛看清它们 谈到了可见性/原子性/有序性三个问题,这些问题通常违背我们的直觉和思考模式,也就导致了很多并发 Bug 为了解决 CPU,内存,IO ...

tan日拱一兵
25分钟前
2
0
网络七层模型与TCP/UDP

为了使全球范围内不同的计算机厂家能够相互之间能够比较协调的进行通信,这个时候就有必要建立一种全球范围内的通用协议,以规范各个厂家之间的通信接口,这就是网络七层模型的由来。本文首先...

爱宝贝丶
28分钟前
2
0
Jenkins World 贡献者峰会及专家答疑展位

本文首发于:Jenkins 中文社区 原文链接 作者:Marky Jackson 译者:shunw Jenkins World 贡献者峰会及专家答疑展位 本文为 Jenkins World 贡献者峰会活动期间的记录 Jenkins 15周岁啦!Jen...

Jenkins中文社区
46分钟前
8
0
杂谈:面向微服务的体系结构评审中需要问的三个问题

面向微服务的体系结构如今风靡全球。这是因为更快的部署节奏和更低的成本是面向微服务的体系结构的基本承诺。 然而,对于大多数试水的公司来说,开发活动更多的是将现有的单块应用程序转换为...

liululee
今天
7
0
OSChina 周二乱弹 —— 我等饭呢,你是不是来错食堂了?

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @ 自行车丢了:给主编推荐首歌 《クリスマスの夜》- 岡村孝子 手机党少年们想听歌,请使劲儿戳(这里) @烽火燎原 :国庆快来,我需要长假! ...

小小编辑
今天
745
11

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部