使用byte数据流,处理纯数字的字符串数据,实现相邻的数据只保留一个,如“555566666777766666”处理为“5676”
基础知识整理:
一个数字字符,需要一个byte数位储存,而字符串可以调用getByte()方法来得到Byte数据流
处理思路:
1.将数字字符串转化成byte数据流的形式,然后在byte[]中,byte[0]为第一个数字,byte[1]为第二个数字····
2.将数字字符串分解后,设计算法将每个数字进行对比,筛选出相邻数据不同的则保留后的解惑,最后输出
具体的实现代码:
1 public class cutString { 2 3 public static void main(String[] args) { 4 String str = "112222333322225556667778"; //待处理的数字字符串数组 5 byte[] c; //保存待处理数字字符串数据Byte数据流的数组 6 ArrayList<Integer> result = new ArrayList<Integer>(); //保存处理结果的数组 7 try { 8 c = str.getBytes("utf-8"); //获取数字字符串的byte数组,“utf-8”方式 9 System.out.println(new String(c,"utf-8")); //输出转换后的byte数组,“utf-8”解码,会发现能够恢复原来的形式 10 for (int i = 0; i < c.length-1; i++) { 11 if (c[i]!=c[i+1]) { //响铃数据不相同,则保存前一个,后一个继续比较 12 result.add((int) c[i]); 13 } 14 if ((i==c.length-2)&&c[c.length-2]!=c[c.length-1]) { //保存前一个会出现末尾两个以上数据相同则无法保存 15 result.add((int) c[c.length-1]); //故当到达倒数第二个数,和后一个不同则添加后一个 16 } //注:这个方法只能解决末尾两个数据不同的情况, 17 } //连续比较关键在于保证开头和结尾两处的正确处理,若最后的数字一直连续则还需要添加一个条件语句,当二者相等则保存 18 for (int i = 0; i < result.size(); i++) { 19 System.out.print(result.get(i)-48); //通过utf-8编码后,会成为49,无法再像第8行那样还原 20 } //由于数字1~9在utf-8中一次递增,所以可以通过每个数字减去48的方法还原他们的值 21 System.out.println(); // 注,此方法只能解决10以内的数字字符串的问题,但数字字符串貌似又没有办法去辨别10以上的数字 22 //所以此方法能够单纯处理数字字符串,但处理 23 24 25 } catch (UnsupportedEncodingException e) { 26 // TODO Auto-generated catch block 27 e.printStackTrace(); 28 } 29 30 String ssss = "1111111"; 31 byte[] dddd; 32 try { 33 dddd = ssss.getBytes("utf-8"); 34 String gggg = new String(dddd,"utf-8"); 35 System.out.println(gggg); 36 } catch (UnsupportedEncodingException e) { 37 // TODO Auto-generated catch block 38 e.printStackTrace(); 39 } 40 41 42 } 43 44 45 }
“utf-8”方式