激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - java 字符串截取的實例詳解

java 字符串截取的實例詳解

2020-12-10 14:06海那邊的小萌男 Java教程

這篇文章主要介紹了java 字符串截取的實例詳解的相關(guān)資料,這里提供了實例代碼幫助大家實現(xiàn)這樣的功能,需要的朋友可以參考下

java 字符串截取的實例詳解

前言:

在Java中,字符串“abcd”與字符串“ab你好”的長度是一樣,都是四個字符。

但對應(yīng)的字節(jié)數(shù)不同,一個漢字占兩個字節(jié)。

定義一個方法,按照指定的字節(jié)數(shù)來取子串。

如:對于“ab你好”,如果取三個字節(jié),那么子串就是ab與“你”字的半個,那么半個就要舍棄。

如果取四個字節(jié)就是“ab你”,取五個字節(jié)還是“ab你”。

僅考慮GBK和utf-8編碼

實例代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import java.io.UnsupportedEncodingException;
 
import org.junit.Test;
 
/**
 * @author<a href="mailto:953801304@qq.com" rel="external nofollow" >胡龍華</a>
 * @version 2017-4-4 下午1:08:45
 * @fileName StringCut.java
 */
public class StringCut {
 
  @Test
  public void analyze(){
    String str1 = "你好abc";
    byte[] bs1=null;
    byte[] bs2=null;
    try {
       bs1 = str1.getBytes("GBK");
       System.out.println("---GBK---");
       for(byte b:bs1){
         System.out.print(b+" ");
       }
       System.out.println();
      //-60 -29 -70 -61 97 98 99
      // 發(fā)現(xiàn)規(guī)律,再gbk中一個中文漢字 都是以兩個字節(jié) 小于0的數(shù)存儲
       bs2 = str1.getBytes("utf-8");
       System.out.println("---utf-8---");
       for(byte b:bs2){
         System.out.print(b+" ");
       }
      //-28 -67 -96 -27 -91 -67 97 98 99
      // 發(fā)現(xiàn)規(guī)律,在utf-8中一個中文漢字 是以三個字節(jié) 小于0 的數(shù)存儲
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    }
  }
  /**
   * 思路:從第len個往前數(shù),連續(xù)2的倍數(shù)個負(fù)數(shù)則全部輸出,單數(shù)個則去掉最后一個輸出
   * @param str
   * @param len
   * @return
   */
  private static String StringCutByGBK(String str,int len){
    byte[] bs = null;
    try {
      int count = 0;
      bs = str .getBytes("GBK");
      for(int i=len-1;i>=0;i--){
        if(bs[i]<0){
          count++;
        }else{
          break;
        }
        // 0  1  2  3  4 5  6 7  8  9  10 11 12 
      //-60 -29 -70 -61 -80 -95 97 98 99 -76 -17 -72 -25
      if(count%2==0){
        String s=new String(bs, 0, len, "GBK");
        System.out.println("截取"+len+"個字符:"+s);
      }else{
        String s=new String(bs, 0, len-1, "GBK");
        System.out.println("截取"+len+"個字符:"+s);
      }
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    }
 
    return null;
  }
  /**
   * 思路:從第len個往前數(shù),連續(xù)3的倍數(shù)個負(fù)數(shù)則全部輸出,其他情況則去掉最后count%3個輸出
   * @param str
   * @param len
   * @return
   */
  private static String StringCutByUTF8(String str,int len){
    byte[] bs = null;
    try {
      int count = 0;
      bs = str .getBytes("UTF-8");
      for(int i=len-1;i>=0;i--){
        if(bs[i]<0){
          count++;
        }else{
          break;
        }
      
      // 0  1  2  3  4  5  6 7 8 9  10 11 12
      //-60 -29 -70 -61 -80 -95 97 98 99 -76 -17 -72 -25
      if(count%3==0){
        String s=new String(bs, 0, len, "UTF-8");
        System.out.println("截取"+len+"個字符:"+s);
      }else{
        String s=new String(bs, 0, len-count%3, "UTF-8");
        System.out.println("截取"+len+"個字符:"+s);
      }
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    }
 
    return null;
  }
  @Test
  public void TEST() {
    String str = "你好啊abc達(dá)哥";
    try {
      System.out.println("---測試gbk---");
      byte bs [] = str.getBytes("GBK");
      for(int i=0;i<=bs.length;i++){
        //System.out.print(bs[i]+" ");
        StringCutByGBK(str,i);
 
      }
 
      System.out.println("---測試UTF-8---");
      byte bs2 [] = str.getBytes("utf-8");
      for(int i=0;i<=bs2.length;i++){
        //System.out.print(bs[i]+" ");
        StringCutByUTF8(str,i);
 
      }
    } catch (UnsupportedEncodingException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
 
  }
 
}

以上就是java 字符串截取的實例,如有疑問請留言或者到本站社區(qū)交流討論,本站關(guān)于java的文章還有很多,希望大家多多搜索參閱,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

原文鏈接:http://blog.csdn.net/weixin_37720904/article/details/69061436

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 大奶一级片 | 久久色网站 | 久久精品一区二区三 | 成年免费大片黄在线观看岛国 | 一级免费特黄视频 | 国产色片在线观看 | 直接在线观看的三级网址 | 国产婷婷一区二区三区 | 久久艳片 | 久久久综合视频 | 黄在线观看在线播放720p | 国产精品99精品 | 欧美一级高潮 | 亚洲一区在线免费视频 | a视频在线免费观看 | 欧美14一15sex性hd| 亚洲午夜久久久久 | 噜噜色av | 久久99国产伦子精品免费 | 日本一区二区不卡高清 | 在线观看麻豆 | 男人的天堂色偷偷 | 鲁丝一区二区二区四区 | 亚洲欧美国产精品va在线观看 | 精品一区二区三区日本 | 国产精品久久久久久久久久电影 | 国产chinesehd精品91 | 免费国产在线精品 | 亚洲成人福利在线观看 | 成人在线免费看 | 精品久久久久久久久久久久 | 精品国产一区二区三区天美传媒 | 黄色av网站在线观看 | 久在线播放 | 中文字幕欧美亚洲 | 看中国一级毛片 | 亚洲成人在线视频网 | 97综合| 国产视频导航 | 99re色| 久草免费资源视频 |