java截取字符串长度
- 格式:doc
- 大小:29.00 KB
- 文档页数:2
java 截断字符串方法Java截断字符串方法在Java编程中,经常会遇到需要截断字符串的情况。
截断字符串是指从一个较长的字符串中选取部分字符,并将其作为一个新的字符串使用。
Java提供了多种方法来完成这个任务,本文将详细介绍这些方法的使用步骤。
截断字符串的方法:1. 使用substring方法:Java的String类提供了substring方法,通过指定起始索引和结束索引,可以从原始字符串中截取部分字符。
具体用法如下:javaString originalStr = "This is a sample string.";String truncatedStr = originalStr.substring(5, 10);System.out.println(truncatedStr); 输出:is asubstring方法接受两个参数,分别是起始索引(包括)和结束索引(不包括)。
在上述示例中,起始索引为5,结束索引为10,截取了原始字符串中的第6个字符到第11个字符之间的内容,得到了结果"is a"。
可以发现,截取的范围是左闭右开的。
注意事项:- 传入的索引必须在字符串的有效范围内,否则会抛出IndexOutOfBoundsException异常。
- 若省略结束索引,则会截取从起始索引到字符串末尾的内容。
2. 使用substring方法截取从指定位置到字符串末尾的内容:如果不知道字符串的长度,只需要截取从指定位置到字符串末尾的内容,可以使用substring方法的单参数版本。
该方法只需传入起始索引,如下所示:javaString originalStr = "This is a sample string.";String truncatedStr = originalStr.substring(8);System.out.println(truncatedStr); 输出:a sample string.在上述示例中,截取了原始字符串从第9个字符(起始索引为8)到末尾的内容,得到了结果"a sample string."。
在Java中,字符串(String)是一个特殊的类,用于处理文本数据。
字符串有许多内置的方法,可以用来提取、操作和查找字符串中的值。
以下是一些常用的字符串取值方法:charAt(int index):这个方法返回指定索引位置的字符。
索引从0开始,到字符串长度减1。
例如:javaString str = "Hello";char c = str.charAt(1); // c 会被赋值为'e'substring(int beginIndex) 和substring(int beginIndex, int endIndex):这两个方法用于提取字符串的子串。
第一个方法从指定的开始索引处提取直到字符串的末尾,第二个方法从指定的开始索引处提取直到指定的结束索引之前(不包括该索引位置)。
例如:javaString str = "Hello";String s1 = str.substring(1); // s1 会被赋值为"ello"String s2 = str.substring(0, 4); // s2 会被赋值为"Hello"indexOf(String substring) 和lastIndexOf(String substring):这两个方法用于查找子串在字符串中第一次出现的位置和最后一次出现的位置。
如果没有找到子串,返回-1。
例如:javaString str = "Hello";int index = str.indexOf("l"); // index 会被赋值为3int lastIndex = stIndexOf("l"); // lastIndex 会被赋值为4startsWith(String prefix) 和endsWith(String suffix):这两个方法用于检查字符串是否以指定的前缀或后缀开始或结束。
java 截取字符串的函数Java中截取字符串的函数主要是指对字符串进行截取,截取出字符串的一部分。
这种操作在Java编程中经常用到,是一个基本的字符串处理功能。
在Java中,有多种截取字符串的函数,下面将介绍一些常见的方法。
1. substring方法Java中最常用的字符串截取方法就是substring()方法了。
这个方法可以截取字符串的一部分,并返回一个新的字符串。
它的语法如下:String substring(int startIndex)其中,startIndex表示开始截取的位置,endIndex表示结束截取的位置(不包含该位置的字符)。
如果省略endIndex,则截取的字符串包括startIndex位置到字符串结尾的所有字符。
例如,若要截取字符串"Hello World!"中的"World",则可以使用以下代码:String str = "Hello World!";String substr = str.substring(6, 11); // 输出"World"2. split方法split()方法是将Target字符串分隔成多个子字符串,并将结果存放在一个数组中。
这个方法接收一个分隔符作为参数,分隔符可以是一个普通的字符、一个字符串或一个表达式。
它的语法如下:3. replace方法replace()方法用于将字符串中的指定字符或子字符串替换为新的字符或子字符串。
它的语法如下:String replace(char oldChar, char newChar)其中,oldChar表示要被替换的字符,newChar表示替换后的字符;target表示要被替换的子字符串,replacement表示替换后的子字符串。
trim()方法用于去除字符串开头和结尾的空格。
这个方法在对用户输入的数据进行处理时非常有用,因为用户经常会不小心在输入中多加空格。
java string的substring用法
Java 中的 `String` 类的 `substring` 方法是用于截取字符串的子串。
该方法有两种重载形式:
1. `substring(int beginIndex)`: 从指定索引位置开始截取子串,直到字符串的末尾。
2. `substring(int beginIndex, int endIndex)`: 从指定索引位置开始截取子串,直到另一个索引位置结束。
下面是 `substring` 方法的示例用法:
```java
String str = "Hello, World!";
// 截取从第 7 个字符开始到字符串末尾的子串
String subStr1 = (7);
(subStr1); // 输出 "World!"
// 截取从第 7 个字符开始到第 12 个字符(不包括)的子串
String subStr2 = (7, 12);
(subStr2); // 输出 "World"
```
需要注意的是,索引位置从 0 开始计数,即第一个字符的索引为 0,第二个字符的索引为1,以此类推。
如果指定的索引位置超出了字符串的长度范围,那么将会抛出 `IndexOutOfBoundsException` 异常。
java 字符串截取方法Java 字符串截取方法在Java编程中,经常会遇到需要截取字符串的情况。
字符串截取是指从一个字符串中获取部分内容的操作,常用于处理字符串的长度、格式等需求。
本文将介绍Java中常用的字符串截取方法,并提供使用示例。
1. 使用substring()方法截取字符串Java中的String类提供了substring()方法,可以用于截取字符串的指定部分。
substring()方法有两种重载形式,一种是指定截取起始位置的方式,另一种是同时指定起始位置和结束位置的方式。
1.1 使用起始位置截取字符串substring(int beginIndex)方法可以从指定起始位置开始截取字符串,包括起始位置的字符。
例如:```javaString str = "Hello World";String result = str.substring(6);System.out.println(result); // 输出 "World"```上述代码中,str.substring(6)表示从索引为6的字符开始截取,截取的结果是"World"。
1.2 使用起始位置和结束位置截取字符串substring(int beginIndex, int endIndex)方法可以从指定起始位置开始截取字符串,并指定截取的结束位置,不包括结束位置的字符。
例如:```javaString str = "Hello World";String result = str.substring(6, 11);System.out.println(result); // 输出 "World"```上述代码中,str.substring(6, 11)表示从索引为6的字符开始截取,截取到索引为10的字符,截取的结果是"World"。
java截取字符串的方法在Java编程中,截取字符串是一项非常基本的操作。
截取字符串通常是指从一个字符串中提取出指定的一部分,可以用于获取特定信息或者进行字符串处理等操作。
Java中提供了多种截取字符串的方法,下面介绍常用的几种方法:1. substring方法substring方法是Java中最基本的截取字符串方法,它可以从一个字符串中截取指定长度或者从指定位置开始到指定位置结束的子字符串。
例如:String str = 'hello world';String subStr1 = str.substring(0, 5); //截取从0开始到5结束的子字符串,即'hello'String subStr2 = str.substring(6); //截取从6开始到字符串结束的子字符串,即'world'2. split方法split方法可以按照指定的分隔符将一个字符串分割成多个子字符串,并将这些子字符串存储在一个数组中。
例如:String str = 'hello,world';String[] subStrs = str.split(','); //按照逗号分隔字符串,得到数组['hello', 'world']3. Matcher类Matcher类是Java中用于正则表达式匹配的类,它可以根据正则表达式截取字符串中满足条件的子字符串。
例如:String str = 'hello123world456';Pattern pattern = pile('d+'); //匹配数字Matcher matcher = pattern.matcher(str);while (matcher.find()) {System.out.println(matcher.group());}以上就是Java中常用的几种截取字符串的方法,可以根据实际需求选择不同的方法进行操作。
【原创版3篇】编辑:_______________审核:_______________审批:_______________单位:_______________时间:____年___月___日序言本店铺为大家精心编写了3篇《java处理string的方法》,供大家借鉴与参考。
下载后,可根据实际需要进行调整和使用,希望能够帮助到大家,谢射!(3篇)《java处理string的方法》篇1Java 提供了许多处理 String 的方法,下面是一些常用的方法:1. 拼接字符串:使用 + 运算符或者 concat 方法可以实现字符串的拼接。
例如:```String str1 = "Hello";String str2 = "World";String result = str1 + " " + str2; // 拼接字符串```2. 获取字符串长度:使用 length() 方法可以获取字符串的长度。
例如: ```String str = "Hello World";int length = str.length(); // 获取字符串长度```3. 判断字符串是否为空:使用 isEmpty() 方法可以判断字符串是否为空。
例如:```String str = "";if (str.isEmpty()) {System.out.println("字符串为空");} else {System.out.println("字符串不为空");}```4. 获取字符串中的某个字符:使用 charAt() 方法可以获取字符串中的某个字符。
例如:```String str = "Hello World";char c = str.charAt(0); // 获取字符串中的第一个字符```5. 获取字符串中的某个子串:使用 substring() 方法可以获取字符串中的某个子串。
java中字符串转整数的方法Java是一种面向对象的编程语言,它具有强大的面向对象编程功能,可以用于许多不同的应用程序。
在Java中,字符串是一种数据类型,可以用来表示文本数据。
要转换字符串为整数,可以使用Java中的一些内置函数和方法。
方法一:使用Java的字符串方法Java中的字符串方法可以用来将字符串转换为整数。
以下是一些常用的字符串方法:1. 截取字符串:可以使用Java的字符串方法中的“截取”方法来从字符串中提取指定长度的子字符串。
例如,可以使用“截取”方法将字符串“56789”转换为整数“5678”。
2. 比较字符串:可以使用Java的字符串方法中的“比较”方法来比较两个字符串。
如果两个字符串相等,则返回0。
如果两个字符串不相等,则返回-1。
例如,可以使用“比较”方法将字符串“5678”和字符串“9876”进行比较,并将结果存储在变量i中。
3. 遍历字符串:可以使用Java的字符串方法中的“遍历”方法来遍历字符串中的每个字符。
例如,可以使用“遍历”方法将字符串“56789”中的每个字符转换为整数。
下面是一些示例代码:```javapublic class StringToNumber {public static void main(String[] args) {String str = "56789";int num = 0;for (char c : str.toCharArray()) {if (c >= "0" && c <= "9") {num = num + c - "0";}}System.out.println(num);}}```方法二:使用Java的内置函数Java内置函数可以用于将字符串转换为整数。
以下是一些常用的内置函数:1. Integer.parseInt(String str):将字符串“56789”转换为整数。
获取字符长度的方法获取字符长度的方法有很多种,不同编程语言和应用场景可能会有不同的实现方式。
以下是一些常见编程语言和方法的示例:1. C 语言在 C 语言中,可以使用库函数 strlen 来计算字符串的长度。
strlen 函数统计字符串中字符的个数,不包括结束符"0"。
例如:```c#include <stdio.h>#include <string.h>int main() {char str[] = "Hello, world!";int len = strlen(str);printf("String length = %d", len);return 0;}```2. Java 语言在 Java 语言中,可以使用字符串类的 length 方法来计算字符串的长度。
例如:```javapublic class Main {public static void main(String[] args) {String str = "Hello, world!";int len = str.length();System.out.println("String length = " + len);}}```3. Python 语言在 Python 语言中,可以使用字符串对象的 len 方法来计算字符串的长度。
例如:```pythonstr = "Hello, world!"len(str)```4. JavaScript 语言在 JavaScript 语言中,可以使用字符串对象的 length 属性来计算字符串的长度。
例如:```javascriptvar str = "Hello, world!";console.log(str.length);```在不同的编程语言中,获取字符长度的方法可能有所不同。
java中截取字符串的⽅式1、length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int len=s.length();2、charAt() 截取⼀个字符 例:char ch; ch="abc".charAt(1); 返回'b'3、getChars() 截取多个字符 void getChars(int sourceStart,int sourceEnd,char target[],int targetStart) sourceStart指定了⼦串开始字符的下标,sourceEnd指定了⼦串结束后的下⼀个字符的下标。
因此,⼦串包含从sourceStart到sourceEnd-1的字符。
接收字符的数组由target指定,target中开始复制⼦串的下标值是targetStart。
例:String s="this is a demo of the getChars method."; char buf[]=new char[20]; s.getChars(10,14,buf,0);4、getBytes() 替代getChars()的⼀种⽅法是将字符存储在字节数组中,该⽅法即getBytes()。
5、toCharArray()6、equals()和equalsIgnoreCase() ⽐较两个字符串7、regionMatches() ⽤于⽐较⼀个字符串中特定区域与另⼀特定区域,它有⼀个重载的形式允许在⽐较中忽略⼤⼩写。
boolean regionMatches(int startIndex,String str2,int str2StartIndex,int numChars) boolean regionMatches(boolean ignoreCase,int startIndex,String str2,int str2StartIndex,int numChars)8、startsWith()和endsWith() startsWith()⽅法决定是否以特定字符串开始,endWith()⽅法决定是否以特定字符串结束9、equals()和== equals()⽅法⽐较字符串对象中的字符,==运算符⽐较两个对象是否引⽤同⼀实例。
在java程序,获取字符串长度的方法Java程序中获取字符串长度的方法方法一:使用length()方法•使用length()方法可以获得字符串的长度。
方法二:使用toCharArray()方法•使用toCharArray()方法可以将字符串转换为字符数组,然后通过获取数组的长度来获取字符串的长度。
方法三:使用getBytes()方法•使用getBytes()方法可以将字符串转换为字节数组,然后通过获取数组的长度来获取字符串的长度。
方法四:使用split()方法•使用split()方法可以将字符串按照指定的分隔符分割成字符串数组,然后通过获取数组的长度来获取字符串的长度。
方法五:使用StringTokenizer类•使用StringTokenizer类可以将字符串按照指定的分隔符分割成多个字符串,然后通过获取分割后的字符串个数来获取字符串的长度。
方法六:使用正则表达式•使用正则表达式可以匹配字符串中的字符或字符串,然后通过计算匹配成功的次数来获取字符串的长度。
方法七:使用StringUtils类•使用Apache Commons Lang库中的StringUtils类可以通过调用StringUtils.length()方法来获取字符串的长度。
方法八:使用StringBuilder类•使用StringBuilder类可以将字符串转换成可变字符串,然后通过获取可变字符串的长度来获取字符串的长度。
方法九:使用Java 8的Stream API•使用Java 8的Stream API可以将字符串转换为字符流,然后通过调用count()方法来获取字符流的长度,即字符串的长度。
以上就是在Java程序中获取字符串长度的几种方法,你可以根据实际情况选择合适的方法来使用。
在日常的开发中,我们经常需要获取字符串的长度来进行字符处理或判断字符串的长度是否符合要求。
这些方法都提供了简单而有效的方式来获取字符串的长度,希望能对你有所帮助。
java判断字符串字符长度的方法
在Java中,可以使用`charAt(int index)`方法来获取一个字符的索引位置,然后使用`len()`方法来获取字符串中该字符出现的次数,从而判断字符串的字符长度。
以下是一个示例代码:
```java
public class StringLength {
public static void main(String[] args) {
String str = "Hello World";
int length = str.length();
System.out.println(" str.length() : " + length);
int count = str.charAt(0).length();
System.out.println(" charAt(0) length : " + count);
}
}
```
运行上述代码后,将输出以下结果:
```
str.length() : 11
charAt(0) length : 1
```
可以看到,字符串 `"Hello World"` 在第一位 `"Hello"` 出现
一次,在第二位 `"World"` 出现一次。
因此,字符串的字符长度为`11`,即包含 `"Hello"` 和 `"World"` 两个字符。
java 字符截取方法
在Java中,有多种方法可以截取字符串中的字符。
下面列出一些常用的方法:
1. substring()方法:该方法可以从字符串中截取指定位置的字符。
例如:
String str = 'Hello World';
String subStr = str.substring(0, 5); // 截取从0到5位置的字符,即'Hello'
2. charAt()方法:该方法可以获得字符串中指定位置的字符。
例如:
char ch = str.charAt(6); // 获得位置为6的字符,即'W' 3. toCharArray()方法:该方法可以将字符串转为字符数组,然后可以对字符进行相应的操作。
例如:
char[] charArray = str.toCharArray(); // 将字符串转为字符数组
char ch = charArray[6]; // 获得位置为6的字符,即'W' 4. getBytes()方法:该方法可以将字符串转为字节数组,然后可以对字节进行相应的操作。
例如:
byte[] byteArray = str.getBytes(); // 将字符串转为字节数组
byte b = byteArray[6]; // 获得位置为6的字节,即'W'的ASCII码
以上就是一些常用的截取字符串中字符的方法,可以根据具体情况选择合适的方法。
java判断字符串长度的方法Java是一种广泛使用的编程语言,它提供了许多强大的功能和工具,方便开发者进行各种任务。
其中,判断字符串长度是一个常见的操作,Java提供了多种方法来实现这个功能。
首先,我们可以使用String类提供的length()方法来获取字符串的长度。
这个方法返回一个int类型的值,代表字符串中字符的个数。
可以通过将字符串对象调用length()方法,即可得到字符串的长度。
比如:```javaString str = "你好,世界!";int length = str.length();System.out.println("字符串的长度为:" + length);```上述代码会输出字符串"你好,世界!"的长度,即8。
注意,这个方法计算的是字符的个数,而不是字节数或者字数。
因此,在处理包含Unicode字符的字符串时,length()方法会非常有用。
其次,我们可以使用String类的toCharArray()方法将字符串转换为字符数组,然后通过数组的length属性获取字符串的长度。
这种方法适用于需要遍历字符串中每个字符的情况,比如统计特定字符出现的次数。
代码示例如下:```javaString str = "Java编程很有趣!";char[] charArray = str.toCharArray();int length = charArray.length;System.out.println("字符串的长度为:" + length);```上述代码会输出字符串"Java编程很有趣!"的长度,即9。
这里,我们先将字符串转换为字符数组,然后通过数组的length属性获取长度。
另外,我们还可以使用Java 8中引入的新特性,如Stream流和Lambda表达式,来判断字符串的长度。
Java实现String按指定字节数截取将 String str ="全球新股及流动性机会8号" (截取后12个字节)作为Find_Short_Name(简称)package .util;import java.io.UnsupportedEncodingException;/*** @description:* @author: itw_qiwb* @date: Created in 2020/12/29 16:42* @version: 1.0* @modified By:*/public class StringSubUtils {/*** 计算当前String字符串所占的总Byte长度* @param args 要截取的字符串* @return返回值int型,字符串所占的字节长度,如果args为空或者“”则返回0* @throws UnsupportedEncodingException*/public static int getStringByteLenths(String args) throws UnsupportedEncodingException {return args != null && args != "" ? args.getBytes("GBK").length : 0;}/*** 按字节截取字符串,指定截取起始字节位置与截取字节长度* @param orignal 要截取的字符串* @param start 截取开始位置* @param count 截取长度* @return截取后的字符串* @throws UnsupportedEncodingException* 使⽤了JAVA不⽀持的编码格式*/public static String substringByte(String orignal, int start, int count) {// 如果⽬标字符串为空,则直接返回,不进⼊截取逻辑;if (orignal == null || "".equals(orignal))return orignal;// 截取Byte长度必须>0if (count <= 0)return orignal;// 截取的起始字节数必须⽐if (start < 0)start = 0;// ⽬标char Pull buff缓存区间;StringBuffer buff = new StringBuffer();try {// 截取字节起始字节位置⼤于⽬标String的Byte的length则返回空值if (start >= getStringByteLenths(orignal))return null;int len = 0;char c;// 遍历String的每⼀个Char字符,计算当前总长度// 如果到当前Char的的字节长度⼤于要截取的字符总长度,则跳出循环返回截取的字符串。
java截取方法Java截取方法,即从字符串中截取需要的一部分内容。
在Java中,我们可以使用substring()方法来截取字符串,也可以使用StringTokenizer类等其他的方法来实现。
本文将着重介绍substring()方法的使用及其注意事项。
一、substring()方法的基本格式和作用Java中字符串的截取方法是通过String类提供的substring()方法来实现的,它的基本格式如下:``` public String substring(int beginIndex) public String substring(int beginIndex, int endIndex) ```其中,第一个参数代表要截取的子串的起始位置,第二个参数代表要截取的子串的结束位置。
注意,substring()方法截取出的字符串不包括指定的结束位置所在的字符,即该字符不在截取出的字符串中。
这个方法的作用是从目标字符串中截取出指定位置的子串,并返回一个新的字符串。
二、substring()方法的使用实例下面通过几个例子来演示substring()方法的使用。
例1. 截取字符串中前面的几个字符``` public class TestSubstring { public static void main(String[] args) { String str = "Hello, world!"; String newStr = str.substring(0, 5);System.out.println(newStr); } }输出结果:Hello ```在这个程序中,我们截取了字符串“Hello, world!”的前5个字符,最终输出的结果是“Hello”。
例2. 截取字符串中的一段子串``` public class TestSubstring { public static void main(String[] args) { String str = "Hello, world!"; String newStr = str.substring(7, 12);System.out.println(newStr); } }输出结果:world ```在这个程序中,我们截取了字符串“Hello, world!”中从第8个字符开始,到第12个字符(不包括第12个字符)的子串“world”,最终输出的结果就是这个子串。
string的截取方法在编程中,字符串是一种非常常用的数据类型。
在处理字符串时,经常会遇到需要截取字符串的需求。
截取字符串就是从一个长字符串中提取出所需的部分字符串。
在本文中,我们将介绍几种常见的字符串截取方法。
1. 使用substring方法substring方法是Java中常用的字符串截取方法之一。
它可以从一个字符串中截取出指定位置的子字符串。
该方法的用法如下:```javaString str = "Hello, world!";String subStr = str.substring(7, 12);System.out.println(subStr); // 输出 "world"```在上述代码中,str.substring(7, 12)表示从字符串str的第7个字符开始(包括第7个字符),截取到第12个字符前(不包括第12个字符)。
截取得到的子字符串为"world"。
2. 使用split方法split方法可以根据指定的分隔符将一个字符串拆分成多个子字符串,并将这些子字符串存储在一个数组中。
我们可以通过指定分隔符的位置来截取所需的子字符串。
下面是一个示例代码:```javaString str = "Hello,world!";String[] subStrs = str.split(",");System.out.println(subStrs[1]); // 输出 "world!"```在上述代码中,str.split(",")表示以逗号为分隔符将字符串str拆分成两个子字符串。
截取得到的子字符串为"world!"。
3. 使用substring和indexOf方法indexOf方法可以用来查找一个字符串中某个子字符串的位置。
string获取长度的方法string是一种常见的数据类型,在编程中经常用来表示文本或字符序列。
在许多编程语言中,我们经常需要获取一个字符串的长度,即字符串中字符的数量。
本文将介绍几种常见的方法来获取字符串的长度。
方法一:使用length()方法在大多数编程语言中,字符串类都提供了一个length()方法,用于获取字符串的长度。
这个方法返回一个整数,表示字符串中字符的数量。
例如,在Java中,我们可以使用以下代码来获取字符串的长度:String str = "Hello World";int length = str.length();System.out.println("字符串的长度为:" + length);方法二:使用size()方法在一些编程语言中,字符串类提供了一个size()方法来获取字符串的长度。
这个方法与length()方法的功能类似,返回字符串中字符的数量。
例如,在Python中,我们可以使用以下代码来获取字符串的长度:str = "Hello World"length = len(str)print("字符串的长度为:" + str(length))方法三:遍历字符串除了使用字符串类提供的方法外,我们还可以通过遍历字符串来获取其长度。
我们可以使用循环来逐个访问字符串中的字符,并计数字符的数量。
例如,在C++中,我们可以使用以下代码来获取字符串的长度:string str = "Hello World";int length = 0;for (int i = 0; str[i] != '\0'; i++) {length++;}cout << "字符串的长度为:" << length << endl;方法四:使用正则表达式在一些编程语言中,我们可以使用正则表达式来获取字符串的长度。
Web应用程序在浏览器中显示字符串时,由于显示长度的限制,常常需要将字符串截取后再进行显示。
但目前很多流行的语言,如C#、Java内部采用的都是Unicode 16(UCS2)编码,在这种编码中所有的字符都是两个字符,因此,如果要截取的字符串是中、英文、数字混合的,就会产生问题,如下面的字符串:
String s = "a加b等于c,如果a等1、b等于2,那么c等3";
上面的字符串既有汉字,又有英文字符和数字。
如果要截取前6个字节的字符,应该是”a加b等",但如果用substring方法截取前6个字符就成了"a 加b等于c"。
产生这个问题的原因是将substring方法将双字节的汉字当成一个字节的字符(UCS2字符)处理了。
要解决这个问题的方法是首先得到该字符串的UCS2编码的字节数组,如下面的代码如下:
byte[] bytes = s.getBytes("Unicode");
由于上面生成的字节数组中前两个字节是标志位,bytes[0] = -2,bytes[1] = -1,因此,要从第三个字节开始扫描,对于一个英文或数字字符,UCS2编码的第二个字节是相应的ASCII,第一个字节是0,如a 的UCS2编码是0 97,而汉字两个字节都不为0,因此,可以利于UCS2编码的这个规则来计算实际的字节数,该方法的实现代码如下:
public static String bSubstring(String s, int length) throws Exception
{
byte[] bytes = s.getBytes("Unicode");
int n = 0; // 表示当前的字节数
int i = 2; // 要截取的字节数,从第3个字节开始
for (; i < bytes.length && n < length; i++)
{
// 奇数位置,如3、5、7等,为UCS2编码中两个字节的第二个字节
if (i % 2 == 1)
{
n++; // 在UCS2第二个字节时n加1
}
else
{
// 当UCS2编码的第一个字节不等于0时,该UCS2字符为汉字,一个汉字算两个字节
if (bytes[i] != 0)
{
n++;
}
}
}
// 如果i为奇数时,处理成偶数
if (i % 2 == 1)
{
// 该UCS2字符是汉字时,去掉这个截一半的汉字
if (bytes[i - 1] != 0)
i = i - 1;
// 该UCS2字符是字母或数字,则保留该字符
else
i = i + 1;
}
return new String(bytes, 0, i, "Unicode");
}
下面代码使用了bSubstring方法:
String s = "a加b等于c,如果a等1、b等于2,那么c等3"; System.out.println(bSubstring(s, 6));
上面的代码截取的字符串是"a加b等"。