`
kiki1120
  • 浏览: 307638 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

截取字符串指定的长度

    博客分类:
  • Java
阅读更多
package com.common;

/**
 * 截取字符串的长度
 * @author S.J
 * @version 1.0, 11/03/2009
 */
public class CharactorLength {
	
	public final static int LENGTH_COMMON = 60;
	public final static int LENGTH_SHORT = 40;
	public final static int LENGTH_ICONS_VIEW = 20;
	
	/**
	 * 判断一个字符是Ascill字符还是其它字符(如汉,日,韩文字符)
	 * @param char c, 需要判断的字符
	 * @return boolean, 返回true,Ascill字符
	 */
	public static boolean isLetter(char c) {
	    int k = 0x80;
	    return c / k == 0 ? true : false;
	}
	
	/**
	 * 得到一个字符串的长度,显示的长度,一个汉字或日韩文长度为2,英文字符长度为1
	 * @param String s, 需要得到长度的字符串
	 * @return int, 得到的字符串长度
	 */
	public static int length(String s) {
	    if (s == null)
	        return 0;
	    char[] c = s.toCharArray();
	    int len = 0;
	    for (int i = 0; i < c.length; i++) {
	        len++;
	        System.out.println("compare " + c[i] + " is letter? ");
	        if (!isLetter(c[i])) {
	            len++;
	            System.out.print("No");
	        }
	        System.out.println("");
	    }
	    return len;
	}
	
	/**
	 * 截取一段字符的长度,不区分中英文,如果数字不正好,则少取一个字符位
	 * @author patriotlml
	 * @param String origin, 原始字符串
	 * @param int len, 截取长度(一个汉字长度按2算的)
	 * @return String, 返回的字符串
	 */
	public static String substring(String originString, int len) {
		System.out.println("substring start----------------");
		String origin = null;
		try{
			origin = originString;//StringConverter.asciiToUnicode(originString);
			System.out.println(origin);
			System.out.println("ISO-8859-1-UTF8 "+new String(originString.getBytes("ISO-8859-1"), "UTF-8"));
			System.out.println("ISO-8859-1-GBK "+new String(originString.getBytes("ISO-8859-1"), "GBK"));
			System.out.println("ISO-8859-1-GB2312 "+new String(originString.getBytes("ISO-8859-1"), "GB2312"));
			System.out.println("ISO-8859-1-UNICODE "+new String(originString.getBytes("ISO-8859-1"), "UNICODE"));
			System.out.println("UNICODE-UTF8 "+new String(originString.getBytes("UNICODE"), "UTF-8"));
			System.out.println("UNICODE-GBK "+new String(originString.getBytes("UNICODE"), "GBK"));
			System.out.println("UNICODE-GB2312 "+new String(originString.getBytes("UNICODE"), "GB2312"));
			System.out.println("UNICODE-ISO-8859-1 "+new String(originString.getBytes("UNICODE"), "ISO-8859-1"));
			System.out.println("UTF8-GBK "+new String(originString.getBytes("UTF-8"), "GBK"));
			System.out.println("UTF8-GB2312 "+new String(originString.getBytes("UTF-8"), "GB2312"));
			System.out.println("UTF8-UNICODE "+new String(originString.getBytes("UTF-8"), "UNICODE"));
			System.out.println("UTF8-ISO-8859-1 "+new String(originString.getBytes("UTF-8"), "ISO-8859-1"));
			System.out.println("GBK-UTF8 "+new String(originString.getBytes("GBK"), "UTF-8"));
			System.out.println("GBK-UNICODE "+new String(originString.getBytes("GBK"), "UNICODE"));
			System.out.println("GBK-ISO-8859-1 "+new String(originString.getBytes("GBK"), "ISO-8859-1"));
			System.out.println("GBK-GB2312 "+new String(originString.getBytes("GBK"), "GB2312"));
			System.out.println("GB2312-UTF8 "+new String(originString.getBytes("GB2312"), "UTF-8"));
			System.out.println("GB2312-UNICODE "+new String(originString.getBytes("GB2312"), "UNICODE"));
			System.out.println("GB2312-ISO-8859-1 "+new String(originString.getBytes("GB2312"), "ISO-8859-1"));
			System.out.println("GB2312-GBK "+new String(originString.getBytes("GB2312"), "GBK"));
		}catch(Exception e){
			e.printStackTrace();
		}
	    if (origin == null || origin.equals("") || len < 1)
	        return "";
	    byte[] sbt = originString.getBytes();
	    System.out.println("sbt start:::::::::::::::::::::::::");
	    for(int i=0; i<sbt.length; i++){
	    	System.out.print(sbt[i]);
	    }
	    System.out.println("\nsbt end:::::::::::::::::::::::::");
	    byte[] strByte = new byte[len];
	    if (len >= length(origin)){
	        return origin;
	    }
	    System.out.println("strByte.length=" + strByte.length);
	    strByte = origin.substring(0, len).getBytes();
	//	        System.arraycopy(origin , 0, strByte, 0, len);
	    int count = 0;
	    for (int i = 0; i < len; i++) {
	        int value = (int) strByte[i];
	        System.out.println("strByte_" + i + strByte[i]);
	        if (value < 0) {
	            count++;
	        }
	    }
	    System.out.println("count=" + count);
	    if (count % 2 != 0) {
	        len = (len == 1) ? ++len : --len;
	    }
	    System.out.println("len=" + len);
	    return new String(strByte, 0, len) + "...";
	}

	public static void main(String[] args) {
		String str = "-56-3-54-65-51-88-50-64-54-65-51-88-50-64-54-65-51-88-50-64-54-65-51-88-50-64-54-65-51-88-50-64-54-65-51-88-50-64-54-65-51-88-50-64-54-65-51-88-50-64-54-65-51-88-50-64-54-65-51-88-50-64-54-65-51-88-50-64-54-65-51-88-50-64-54-65-51-88-50-64-54-65-51-88-50-64-54-65-51-88-50-64-54-65-51-88-50-64-51-88";
		String str_cn = "测试中文字符长度测试中文字符长度测试中文字符长度测试中文字符长度测试中文字符长度测试中文字符长度测试中文字符长度";
		System.out.println(substring(str, LENGTH_SHORT));
		System.out.println(substring(str_cn, LENGTH_SHORT));
	}

}

 

分享到:
评论

相关推荐

    截取指定长度的字符串

    自己输入一个字符串,字符串中可以包括字符和汉字,截取指定的字符串

    SQL截取字符串函数

    SQL截取字符串函数(1、截取从字符串左边开始N个字符 2、截取从字符串右边开始N个字符(例如取字符www.163.com) 3、截取字符串中任意位置及长度 等等)

    C#字符串截取固定长度的方法

    C#字符串截取固定长度的方法

    C#区分中英文按照指定长度截取字符串的方法

    本文实例讲述了C#区分中英文按照指定长度截取字符串的方法。分享给大家供大家参考。具体如下: 这段C#代码用于按照指定的长度截取字符串,一个中文字符算2个字符,按照这个方法截取的字符串基本可以保持显示长度一致...

    js截取字符串-三种方法

    js截取字符串 substr() 方法能够根据指定长度来截取子字符串。它包含两个参数,第一个参数 表示准备截取的子字符串起始下标,第二个参数表示截取的长度。 示例 1 在下面示例中使用 lastIndexOf() 获取字符串的最后一...

    greenplum常用命令

    2)字符串长度:length 3)字符串截取:substring('fsfd' from 2 for 3)、substr('fsfd',2,3) 4)字符串两头去字符:trim(' fsf')、trim(both 'x' from 'xfdsx') 5)大小写转换:upper()、lower() 6)替换字符...

    截取字符串的五大方法

    是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。 start 是一个整数,指定子串的开始位置。 length 是一个整数,指定子串的长度(要返回的字符数或字节数)。 ...

    jQuery截取指定长度字符串代码

    例子,截取字符串代码。 &lt;!DOCTYPE HTML&gt; &lt;html&gt; &lt;head&gt; &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt; &lt;title&gt;jQuery截取字符串操作---www.jb51.net&lt;/...

    Oracle截取字符串去掉字段末尾指定长度的字符

    lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节 length(string)计算string所占的字符长度:返回字符串的长度,单位是字符 ...PS:oracle去掉字符串中所有指定字符 Selec

    jQuery截取指定长度字符串的实现原理及代码

    截取指定长度字符串操作在网站建设中大量使用,尤其是在新闻列表这种类型的操作中大量应用。 下面就是一个截取字符串代码实例: &lt;!DOCTYPE HTML&gt; &lt;html&gt; &lt;head&gt; &lt;meta ...

    go语言按显示长度截取字符串的方法

    主要介绍了go语言按显示长度截取字符串的方法,涉及Go语言操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    vue如何截取字符串

    主要介绍了vue如何截取字符串,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    C#截取指定长度的方法

    例如要截取字符串"我是1个中国人",取3位长度,那得到的结果是"我",如果取6位长度,得到的结果是"我是1",因为汉字是两个字节。 当时的思路主要是考虑最后一位是单字节还是双字节,不过最终得出了比较不错的方法

    文本框指定字符串长度

    ios限制uitextfield字符长度

    字符串截取

    根据指定字节数截取字符串,当指定处为中文第一个字节时少截取一个字符,当长度大于指定截取长度时,截取后在字符串末尾追加指定字符串 * 这里添加了字符串的编码,因为页面的编码不同,字符串所占字节

    SQL 截取字符串应用代码

    字符串截取函数,只限单字节字符使用(对于中文的截取时遇上奇数长度是会出现乱码,需另行处理),本函数可截取字符串指定范围内的字符。

    前后台实现精确截取指定长度字符串(考虑全角半角)

    前后台实现精确截取指定长度字符串(考虑全角半角)前后台实现精确截取指定长度字符串(考虑全角半角)前后台实现精确截取指定长度字符串(考虑全角半角)前后台实现精确截取指定长度字符串(考虑全角半角)

    c#截取指定长度,中英文混合字符串

    c#截取指定长度 中英文混合字符串 一个中文为两个字符计算,英文一个字符。

    字符串 截取

    指定截取字节数,截取字符串,但是不能出现半个汉字的情况,例如: 字符串"喊sd中d王",长度2byte为:喊,长度3byte为:喊s,长度4byte为:喊sd,长度5byte为:喊sd,长度6byte为:喊sd中

Global site tag (gtag.js) - Google Analytics