字符串处理
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 多处理进程中运行较慢的 OpenCV 代码片段