黑马程序员—编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表)

来源:互联网 发布:as3与js交互 编辑:程序博客网 时间:2024/04/30 14:14

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

package two;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class di10 {
public static void main(String[] args)throws Exception {
System.out.println("请输入“字符”和要获取字符相应位置的“数字”");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String u=br.readLine();
int m=br.read();
byteSubStr(u,m);
}
public static void byteSubStr(String str , int len)
{
String s = null; //初始化字符串s,赋值为空
if(str != null) //传入的字符串不能为空
{
byte[] a = null; //初始化字节数组,赋值为空
try 
{
a = str.getBytes("GBK"); //将字符串转化为字节数组,GBK码表,此时字节数组的长度为14

/*
catch (UnsupportedEncodingException e) //捕捉编码失败异常
{
e.printStackTrace();
}
*/
catch (Exception e) //捕捉编码失败异常
{
throw new RuntimeException("错误");
}
//System.out.println("String length:"+a.length);打印字节数组的长度
if(a.length <= len)
{
s = str; //如果要求取出的字节长度大于字节数组应有长度,则将s初始化为str
}
else if(len > 0)
{
s = new String(a, 0, len); //如果字节长度在字节数组长度范围内,则根据要求取出长度len,创建新的字符串s。
int length = s.length(); //获取新字符串的长度
//System.out.println(s.length());
if(str.charAt(length - 1) != s.charAt(length-1))//如果原字符串中相应位置上的字符与
//新字符串相应位置上的字符不相等,说明新字符串中相应位置只有半个中文,则应该讲数组指针向左移一位,形成新的子串。
{
if(length < 2)
{
s = null; //如果新字符串的长度小于2,则将新字符串赋值为空。
}


else
{
s = s.substring(0, length - 1); //将符合条件的子串复制给s
}
}
}
}
System.out.println(s);
}
}


------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------



0 0
原创粉丝点击