字符串处理

Posted 小调~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串处理相关的知识,希望对你有一定的参考价值。

二、字符串缓存类StringBuffer

StringBuffer构造函数表

StringBuffer()
          构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
StringBuffer(CharSequence seq)
          public java.lang.StringBuilder(CharSequence seq) 构造一个字符串缓冲区,它包含与指定的 CharSequence 相同的字符。
StringBuffer(int capacity)
          构造一个不带字符,但具有指定初始容量的字符串缓冲区。
StringBuffer(String str)
          构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。

常用构造函数的使用:(可以看出StringBuffer的长度是可变的)

 1 public class javaTest2 implements javaTest1 {
 2 
 3 public static void main(String[] args) {
 4 
 5     StringBuffer strb=new StringBuffer("aaa");
 6     System.out.println(strb);
 7     StringBuffer strb1=new StringBuffer(15);
 8     StringBuffer strb2=new StringBuffer();
 9     System.out.println("strb‘length:"+strb.length()+"   strb1‘length:"
10                           +strb1.length()+"   strb2‘length:"+strb2.length());
11     strb2.append("aa");
12     System.out.println("strb2‘s length:"+strb2.length());
13     
14   }
15 }

运行结果:

 1 aaa

2 strb‘length:3 strb1‘length:0 strb2‘length:0

3 strb2‘s length:2 

 

 

字符串缓存可以被多个线程安全的使用。它的方法使用synchronized修饰。这些方法可以在需要的时候可以同步执行,因而任一特定实力的所有操作就好像是以串行的次序发生的。

1.StringBuffer的特点

        ①他可以对字符串进行修改

        ②长度可变

        ③可以操作多种数据类型

        ④与String相似,拥有String类的大多数方法,可以通过toString()方法变成字符串。

2.StringBuffer的功能

(1)存储

        1>append(数据)

        Append()可以接收各种数据类型,除了byte和short,但是int可以替代两者,此类方法返回的还是本类对象,因为StringBuffer是可以被改变的,无需像String一样返回一个新的字符串。

        2>inset(int offset,数据)

        此方法依旧是在本类对象中修改,offset指定是在此位置插入后面的数据。

(2)删除

        1> delete(int start,int end)

        返回本类对象,删除从start到end-1位置上的字符(包头不包尾)。

        2> deleteCharAt(int index)

        返回本类对象,删除指定位置index上的字符。

(3)获取

        1> substring(int start,int end)

        返回的String类型,不是StringBuffer,依旧是截取从Strart到end-1这段字符串。

        2> chatAt(int index)

        返回字符类型,根据指定位置查找该位上的字符

        3> indexOf(String str)

        返回int类型,获取子串str在缓冲区中的起始位置

        4> lastIndexOf(String str)

        返回int类型,获取子串最后一次出现在缓冲区中的具体位置

(4)修改

        1> replace(int start,int end,String str)

        返回本类对象,将从start到end-1的这段字符串替换成str。

        2> setCharAt(int index,char ch)

        无返回值,将指定位置index上的元素替换为ch。

(5)反转

        reverse()

        返回本类对象,将缓冲区中的内容反转过来。

 

常用方法使用

 1 public class javaTest2 implements javaTest1 {
 2 
 3 public static void main(String[] args) {
 4 
 5     //字符串和字符串缓存的相互转换
 6     String a="aaabbbccc";
 7     StringBuffer strb=new StringBuffer(a);
 8     System.out.println("strb(字符串缓存):"+strb);
 9     String b=strb.toString();
10     System.out.println("b(字符串):"+b);
11     
12     
13     //存储(注:appand插在字符的尾部,insert是插在指定位置之前)
14     //(扩充appand)
15     strb.append(true);
16     System.out.println("strb扩充后1:"+strb);
17     strb.append("ddd");
18     System.out.println("strb扩充后2:"+strb);
19     char []c={‘e‘,‘e‘,‘e‘};
20     strb.append(c, 0, 2);
21     System.out.println("strb扩充后3:"+strb);
22     
23     //插入insert
24     strb.insert(0, ‘~‘);
25     System.out.println("strb插入后1:"+strb);
26     strb.insert(0, "~~");
27     System.out.println("strb插入后2:"+strb);
28     char []c1={‘&‘,‘&‘,‘&‘};
29     strb.insert(6, c1, 0, 3);
30     System.out.println("strb插入后3:"+strb);
31     
32     //返回当前内容的长度
33     System.out.println("strb‘s length:"+strb.length());
34     
35     //查找(返回第i位置处的字符)
36     System.out.println("strb‘s "+"2th "+"character is "+strb.charAt(2));
37     
38     //截取(返回内容中从位置start到结束的部分。同String.substring(int start))两种
39     String str=strb.substring(5);
40     System.out.println("截取的部分str为:"+str);
41     String str1=strb.substring(5,9);
42     System.out.println("截取的部分str1为:"+str1);
43     
44     //查询字符串位置
45     System.out.println("查询的字符串&&第一次出现在strb的位置为:"+strb.indexOf("&&"));
46     System.out.println("查询的字符串&&最后一次出现在strb的位置为:"+strb.lastIndexOf("&&"));
47     
48     //替代(也会改变目标字符)
49     StringBuffer strb1=strb.replace(0, 3, "");
50     System.out.println("替换后的strb: "+strb);
51     System.out.println("替换后的strb1:"+strb1);
52     
53     //删除
54     System.out.println("删除操作后的strb:"+strb.delete(3, 6));
55     
56     //返回当前空间的大小  如果空间满了会自动扩展
57     System.out.println( "strb‘s space:"+strb.capacity());
58     
59     //翻转
60     System.out.println("strb的翻转:"+strb.reverse());
61 
62   }
63 }

运行结果:

 1 strb(字符串缓存):aaabbbccc
 2 b(字符串):aaabbbccc
 3 strb扩充后1:aaabbbccctrue
 4 strb扩充后2:aaabbbccctrueddd
 5 strb扩充后3:aaabbbccctruedddee
 6 strb插入后1:~aaabbbccctruedddee
 7 strb插入后2:~~~aaabbbccctruedddee
 8 strb插入后3:~~~aaa&&&bbbccctruedddee
 9 strb‘s length:24
10 strb‘s 2th character is ~
11 截取的部分str为:a&&&bbbccctruedddee
12 截取的部分str1为:a&&&
13 查询的字符串&&第一次出现在strb的位置为:6
14 查询的字符串&&最后一次出现在strb的位置为:7
15 替换后的strb: aaa&&&bbbccctruedddee
16 替换后的strb1:aaa&&&bbbccctruedddee
17 删除操作后的strb:aaabbbccctruedddee
18 strb‘s space:25
19 strb的翻转:eedddeurtcccbbbaaa

 

3. StringBuilder

        StringBuilder可以看做是StringBuffer的简易替换,他们的功能一样用法一样。区别在于StringBuffer是线程同步的,而StringBuilder是线程不同步的。所以当我们的程序中只有一个线程时我们使用StringBuilder,这样效率高。

以上是关于字符串处理的主要内容,如果未能解决你的问题,请参考以下文章

python+spark程序代码片段

处理屏幕旋转上的片段重复(带有示例代码)

在 Python 多处理进程中运行较慢的 OpenCV 代码片段

你如何在 python 中处理 graphql 查询和片段?

python常用代码片段总结

是否有在单个活动中处理多个片段的 Android 设计模式?