码迷,mamicode.com
首页 > 编程语言 > 详细

java按给定字节数截取含有中英文的字符串

时间:2017-08-18 22:23:15      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:转换   static   添加   直接   blog   else   大于等于   create   rgs   

  • 需求:按给定字节数截取含有中英文的字符串,最后一个字节如果截取的是中文则不截取,是英文则截取
  • 实现代码如下(未进行空字符串或非法字节数等异常判断)
 1 import java.util.ArrayList;
 2 import java.util.List;
 3 import java.util.Scanner;
 4 
 5 /**
 6  * Created by ycl on 2017-8-18 21:01:16.
 7  */
 8 public class TestA {
 9     public static void main(String[] args) {
10         Scanner sc = new Scanner(System.in);
11         System.out.println("字符串:");
12         String str = sc.nextLine();
13         System.out.println("输入截取字节数:");
14         int count = sc.nextInt();
15         getSubStrByByte(str, count);
16 
17     }
18 
19     /**
20      * @param str     接收输入的中英文字符串
21      * @param byteLen 接收要截取的字节数
22      */
23     public static void getSubStrByByte(String str, int byteLen) {
24         byte[] bytes = str.getBytes();
25         int count = 0;   //已经遍历出的字节数
26         String tempStr = "";  //最终输出字符串
27         List<Byte> list = new ArrayList<Byte>();  //临时存放一个中文每一个字节的列表
28         for (byte b : bytes) {
29             if (b >= 0) {//大于等于0表示英文
30                 tempStr += new String(new byte[]{b}); //直接追加到输出字符串
31                 count++;
32             } else {
33                 list.add(b);   //小于0表示中文,并将字节添加到临时列表中
34                 if (list.size() == 3) {  //当列表长度为3时,先转换为字符数组,再转为字符并追加到输出字符串
35                     byte[] temp = new byte[3];
36                     int i = 0;
37                     for (Byte l : list) {
38                         temp[i] = (byte) l;
39                         i++;
40                     }
41                     tempStr += new String(temp);
42                     count += 2;  //一个中文字节数加2
43                     list.clear(); //清空临时列表
44                 }
45             }
46             if (count == byteLen) {   //当遍历的字节数等于需要截取的字节数时则输出,并跳出循环
47                 System.out.println(tempStr);
48                 break;
49             }
50             //当遍历的字节数减需要截取的字节数=1时则说明最后一个字符为中文,输出并跳出循环
51             else if ((count - byteLen == 1)) {
52                 System.out.println(tempStr.substring(0, tempStr.length() - 1));
53                 break;
54             }
55         }
56     }
57 }

 

java按给定字节数截取含有中英文的字符串

标签:转换   static   添加   直接   blog   else   大于等于   create   rgs   

原文地址:http://www.cnblogs.com/BeautyInWholeLife/p/7392316.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!