您的位置:首页 > 编程语言 > Java开发

Java 按指定长度截取字符串,考虑全角半角

2015-03-25 22:15 295 查看
于用 Java 来截取指定长度的字符串,我在网上看到很多帖子和方法,大都是说用 substring() ,但是如果考虑到全角半角的话,这是怎么也达不到期望值的。因为之前自己也用到过,所以把自己整理好的一些东西拿出来,希望能和大家分享下。如果还有更好更简洁的方法,望大侠们指点一二。

 

注:所有测试都是基于该值已通过必须输入的检查。

1.  subByStrLenth() 在不考虑全角的情况下,即假定该字符串都是半角的。

2.  subByFullWidth() 如果已确保该值都是由全角字符,即字符都是全角且指定长度是大于 0 的偶数的情况下。

3.  subByStrByte() 考虑全角半角的截取,且舍掉半个汉字后,长度不足的情况下是否要在右边补空格。

Java代码

 



// 按指定的长度来截取字符串,不管全角半角,一个字符一个长度。      

[b]public[/b] [b]static[/b] String subByStrLength(String value, [b]int[/b] length) {  

  

    [b]return[/b] value.length() > length ? [b]new[/b] String(value.substring(0, length)) : value;  

}  

  

// 按指定的长度来截取字符串,前提是字符串是全角的,指定长度是大于0的偶数。  

[b]public[/b] [b]static[/b] String subByFullWidth(String value, [b]int[/b] length) {  

  

    [b]return[/b] value.getBytes().length > length ? [b]new[/b] String(value.getBytes(), 0, length) : value;  

}  

  

// 按指定的长度下,考虑字符的全角半角,且当舍掉最后半个汉字后,长度不足的情况下是否要在右边补空格。  

[b]public[/b] [b]static[/b] String subByStrByte(String value, [b]int[/b] length, [b]boolean[/b] paddingSpace) {  

  

    String valueTemp = "";  

  

    // 指定的长度下,考虑字符的全角半角,最后的汉字。  

    [b]if[/b] (value.getBytes().length > length) {  

        [b]for[/b] ([b]char[/b] c : value.toCharArray()) {  

            [b]if[/b] (valueTemp.getBytes().length <= length) {  

                valueTemp += c;  

  

                [b]if[/b] (valueTemp.getBytes().length == length) {  

                    [b]break[/b];  

  

                } [b]else[/b] [b]if[/b] (valueTemp.getBytes().length > length) {  

                    [b]char[/b][] charTemp = valueTemp.toCharArray();  

                    valueTemp = "";  

  

                    [b]for[/b] ([b]int[/b] i = 0; i < charTemp.length - 1; i++) {  

                        valueTemp += charTemp[i];  

                    }  

  

                    [b]break[/b];  

                }  

            }  

        }  

        value = valueTemp;  

    }  

  

    // 指定的长度下,长度不足的情况是否要在右边补空格。  

    [b]if[/b] (paddingSpace) {  

        StringBuffer valueBuffer = [b]new[/b] StringBuffer(value);  

        [b]for[/b] ([b]int[/b] i = 0; i < length - value.getBytes().length; i++) {  

            valueBuffer.append(" ");  

        }  

  

        [b]return[/b] valueBuffer.toString();  

    }  

  

    [b]return[/b] value;  

}  

  

// 字符串的截取测试  

[b]public[/b] [b]static[/b] [b]void[/b] main(String[] args) {  

  

    String str1 = "字符串的截取";  

    String str2 = "字符串的截取test";  

  

    System.out.println(subByStrByte(str2, 7, [b]true[/b]));  

    System.out.println(subByStrByte(str2, 7, [b]false[/b]));  

  

    System.out.println(subByStrLength(str2, 7));  

    System.out.println(subByFullWidth(str1, 6));  

}  

 

 

第一个输出结果是带空格的字符串“字符串 ”。

运行结果:

 

字符串

字符串

字符串的截取 t

字符串
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐