截取字符串

【需求说明】:

  编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉子不被截半个,如"我ABC" 4,因该截为"我AB",输入"我ABC汉DEF" 6,应该输出"我ABC",而不是"我ABC+汉的半个"

【需求分析】:

  容易产生困惑的是中文字符和英文字符,在这里需要考虑汉字和英文字符的占用字节数问题,中文字符占两个字节,英文字符占一个字节,理解了这个,就很容易完成本题了。

【需求实现】:

  直接进入源码吧,源码注释已解释很详细了

 1 package edu.aeon.algorithm;
 2 
 3 /**
 4  * @author lzj
 5  * 创建于: 2017年10月20日 上午12:00:52 by lzj
 6  * 需求/说明: 
 7  * 编写一个截取字符串的函数,输入为一个字符串和字节数,
 8  * 输出为按字节截取的字符串。但是要保证汉子不被截半个,
 9  * 如"我ABC" 4,因该截为"我AB",输入"我ABC汉DEF" 6,
10  * 应该输出"我ABC",而不是"我ABC+汉的半个"
11  */
12 public class Substr {
13     /**
14      * 
15      * at 2017年10月20日 上午12:02:51 by lzj
16      * @parameters1 String str 输入的要截取的字符串
17      * @parameters2 int byt 输入的要截取字符串的字节数
18      * @return void
19      * 函数说明:根据所传入要截取的字节数及字符串来截取满足需求的字符串
20      */
21     
22     private void substring(String str,int byt) {
23         String arr[] =new String[str.length()];
24         String stegx="[u4e00-u9fa5]";
25         int count=0; //字节计数器
26         for(int i=0;i<arr.length;i++) {
27             arr[i] = str.substring(i, i+1);
28             if(arr[i].matches(stegx)) {
29                 count=count+2; //如果arr[i]是汉字则字节计数器+2,因为一个汉字占两个字节
30             }else {
31                 count=count+1; //非汉子 字节计数器+1
32             }
33             if(count <= byt) {
34                 System.out.print(arr[i]); //打印出,注意是在循环里面,也就是循环打印出,非单个打印
35             }
36             /*
37              * 此处看需求、如果需求是打印出按n字节截取的所有字符串、
38              * 则将此处[code]到[/code]代码段的注释放开即可、将上
39              * 面一行if条件改为if(count < byt)即可,此处仅按照按需求
40              * 所以将[code]到[/code]代码段作为注释
41              * */
42             //[code]
43             /*else if(count == byt) {  
44                 System.out.print(arr[i]);
45                 count=0;
46                 System.out.println();
47             }else {
48                 count=0;
49                 System.out.println();
50             }*/
51             //[/code]
52         }
53     }
54     /**
55      * 
56      * at 2017年10月20日 上午12:07:15 by lzj
57      * @parameters1 String[] args
58      * @return void
59      */
60     public static void main(String[] args) {
61         //这里可以自己改造通过控制台输入,这个简单,我就不浪费时间了
62         Substr str=new Substr();
63         str.substring("我ABC汉DEF", 4);
64         System.out.println("
=====================================");
65         str.substring("我ABC汉DEF", 6);
66     }
67 }
单击“+”查看

【运行截图】:

  

如有任何疑问可联系邮箱: 给我发邮件、或直接联系QQ:1584875179 || 点返回首页

原文地址:https://www.cnblogs.com/aeon/p/7696562.html