java 字符串截取的实例详解

2025-05-29 0 107

java 字符串截取的实例详解

前言:

Java中,字符串“abcd”与字符串“ab你好”的长度是一样,都是四个字符。

但对应的字节数不同,一个汉字占两个字节。

定义一个方法,按照指定的字节数来取子串。

如:对于“ab你好”,如果取三个字节,那么子串就是ab与“你”字的半个,那么半个就要舍弃。

如果取四个字节就是“ab你”,取五个字节还是“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

// 发现规律,再gbk中一个中文汉字 都是以两个字节 小于0的数存储

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

// 发现规律,在utf-8中一个中文汉字 是以三个字节 小于0 的数存储

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

}

/**

* 思路:从第len个往前数,连续2的倍数个负数则全部输出,单数个则去掉最后一个输出

* @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个往前数,连续3的倍数个负数则全部输出,其他情况则去掉最后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达哥";

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 字符串截取的实例,如有疑问请留言或者到本站社区交流讨论,本站关于java的文章还有很多,希望大家多多搜索参阅,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 java 字符串截取的实例详解 https://www.kuaiidc.com/115397.html

相关文章

发表评论
暂无评论