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));
}
}
分享到:
相关推荐
截取字符串通常有两种主要方法:固定位置截取和指定长度截取。 1. 固定位置截取:这种方法通常基于起始位置和结束位置来获取字符串的一部分。例如,在Python中,你可以使用切片操作符`[start:end]`来截取字符串,...
在C#编程中,有时我们需要根据字节长度来截取字符串,这可能是因为要处理不同编码格式的数据,或者为了适应特定的传输限制。本篇将详细介绍如何在C#中按照字节长度截取字符串,并结合正则表达式进行操作。 首先,...
JSP 页面实质上是 Java 代码的视图部分,因此可以使用 Java 的 String 类提供的方法来截取字符串。以下是一些常用的方法: - `substring(int beginIndex, int endIndex)`:此方法用于从字符串中提取子字符串。`...
在C#编程语言中,经常需要处理字符串操作,其中一个常见的需求就是根据特定的长度来截取字符串。本文将详细介绍如何使用C#实现字符串的固定长度截取,并深入探讨背后的原理和技术细节。 #### 方法一:使用Substring...
在Python中,可以使用内置的`[start:end]`切片操作来截取字符串。如果要考虑字节,我们需要使用`encode()`方法将字符串转化为字节串,因为Python的切片默认是基于字符的。例如: ```python s = "你好,世界" byte_s...
在ASP(Active Server Pages)中,处理字符串是常见的任务之一,尤其在网页开发中,我们经常需要截取字符串以满足特定的需求。`ASP截取字符串`这个话题涉及到如何使用ASP内置的函数或自定义方法来操作字符串,以便控制...
根据提供的信息,我们可以了解到这是一篇关于在批处理脚本(Bat文件)中截取字符串的文章。批处理脚本是一种Windows环境下的脚本语言,它能够执行一系列预先编写的命令来实现特定的功能。本文将详细介绍如何在批处理...
然而,截取字符串时,如果不注意,可能会因为字节对齐的问题导致字符被错误地分割。例如,如果一个中文字符被截断在两个字节之间,那么在显示时就会出现乱码。 要实现安全的混合字符串截取,我们可以使用Delphi内置...
在 `main` 方法中,我们创建了一个 `SplitString` 对象,并调用其 `SplitIt` 方法来截取字符串。 总结 本例中,我们实现了一个 Java 字符串截取函数,该函数可以截取指定字节的字符串,并保证汉字不被截半个。该...
- **LeftStr**:从字符串左侧开始截取指定长度的字符。例如,`LeftStr('HelloWorld', 2)` 将返回 "He"。 - **RightStr**:从字符串右侧开始截取指定长度的字符。如 `RightStr('HelloWorld', 2)` 返回 "ld"。 - **...
本文实例讲述了C#区分中英文按照指定长度截取字符串的方法。分享给大家供大家参考。具体如下: 这段C#代码用于按照指定的长度截取字符串,一个中文字符算2个字符,按照这个方法截取的字符串基本可以保持显示长度一致...
6. **从开始截取到指定某段字符串结尾midStr**: ```java str = str.substring(0, str.indexOf(midStr) + midStr.length()); ``` 这行代码会截取到`midStr`字符串出现的位置,并包含`midStr`本身。 7. **替换...
标题中的“Java 字符串指定长度”指的是在Java编程中,如何处理字符串以确保它们的长度符合特定的要求。这可能涉及到字符串的截取、填充、格式化等方面的知识。以下是对这个主题的详细解释: 在Java中,字符串是不...
在某些场景下,我们可能需要按照特定的字节数来截取字符串,比如在网络传输、数据解析或编码转换时。本篇文章将详细探讨“按byte截取字符串”这一技术点,并通过两个Java文件——SliceByByteTest.java和SliceByByte....
### ASP.NET 截取字符串方法详解 在ASP.NET开发中,有时我们需要对字符串进行截取操作,特别是当涉及到多字节字符(如中文)时,简单的字符串截取可能会导致乱码问题。本文将详细介绍一种使用字节精确计算的ASP.NET...
`subStringByIndex` 函数通过指定起始索引(`begin`)和结束索引(`end`)来截取字符串。该函数返回一个新的字符串,该字符串包含了原字符串中从 `begin` 到 `end`(包括 `end`)的所有字符。 #### 参数说明 - **...
### SQL截取字符串函数详解 在SQL中,处理文本数据是一项常见的需求,特别是在数据库管理和数据分析领域。本文将详细介绍几种常用的SQL截取字符串函数及其应用场景,包括`LEFT`、`RIGHT`、`SUBSTRING`以及一些高级...
首先,理解为什么需要按照字节长度而不是字符长度截取字符串。在处理非ASCII字符(如中文、日文等)时,一个字符可能占用多个字节。如果单纯按字符长度截取,可能会导致截取到半字符,从而破坏字符串的读取。因此,...
这个问题在文档标题“Java精确截取字符串.doc”中提到,描述也指出了解决字符串过长并需要添加省略号的需求。 以下是一种常见的解决方法,通过判断字符串中的每个字节来确定是否为中文字符,并据此进行截取: ```...
"JAVA按照字节截取字符串" JAVA按照字节截取字符串是Java编程语言中的一项重要技术,通过本文,我们将详细介绍如何使用Java语言按照字节截取字符串。 首先,我们需要了解什么是字节截取。在计算机科学中,字节是...