栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

String和stringbuffer和stringbuilder

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

String和stringbuffer和stringbuilder

 

我们经常会使用到String和stringbuffer和stringbuilder简单说几个方法。

@1:

一、String类

String类在java.lang包中,是一个引用类,java使用String类创建一个字符串变量,字符串变量属于对象。java把String类声明的final类,不能有类。String类对象创建后不能修改,由0或多个字符组成,包含在一对双引号之间。

二、String类对象的创建

1.String str = "Hello";

2.String str = new String("Hello");

三、String类常用方法

1.求字符串的长度

public static void main(String[] args) {
     String str = "123456789";
     String str1 = "爱党爱国,乐于助人";

        System.out.println("我的长度int"+str.length());//str.length()返回字符串的长度9
        System.out.println("我的长度int"+str1.length());//str.length()返回字符串的长度9

    }

2.提取子串

用String类的substring方法可以提取字符串中的子串,该方法有两种常用参数:

.public String substring(int beginIndex) // 该方法从beginIndex位置起,从当前字符串中取出剩余的字符作为一个新的字符串返回。


.public String substring(int beginIndex, int endIndex) // 该方法从beginIndex位置起,从当前字符串中取出到endIndex-1位置的字符作为一个新的字符串返回。
 

public static void main(String[] args) {
     String str = "123456789";
     String str1 = "爱党爱国,乐于助人";

        System.out.println(str.substring(3));//456789
        System.out.println(str1.substring(0,4));//爱党爱国
    }

3.求字符串某一位置字符

public char charAt(int index)   //   返回字符串中指定位置的字符;注意字符串中第一个字符索引是0,最后一个是length()-1。

public static void main(String[] args) {
     String str = "123456789";
     String str1 = "爱党爱国,乐于助人";

        System.out.println(str.charAt(0));//1
        System.out.println(str1.charAt(8)); //人
    }

4.字符串比较

1)public int compareTo(String anotherString)//该方法是对字符串内容按字典顺序进行大小比较,通过返回的整数值指明当前字符串与参数字符串的大小关系。若当前对象比参数大则返回正整数,反之返回负整数,相等返回0。
2)public int compareToIgnore(String anotherString)//与compareTo方法相似,但忽略大小写。
3)public boolean equals(Object anotherObject)//比较当前字符串和参数字符串,在两个字符串相等的时候返回true,否则返回false。
4)public boolean equalsIgnoreCase(String anotherString)//与equals方法相似,但忽略大小写。
 

 public static void main(String[] args) {
     String str = "123456789";
     String str1 = "爱党爱国,乐于助人";
     String str2 = "abc";
     String str3 = "ABC";

        System.out.println(str.compareTo(str1)); //-29184
        System.out.println (str.compareToIgnoreCase(str1));//-29184
        System.out.println (str2.compareTo(str3));//32
        System.out.println (str2.compareToIgnoreCase(str3));//0
        boolean c = str2.equals(str3); //c=false
        boolean d = str2.equalsIgnoreCase(str3); //d=true

    }

5、字符串连接
public String concat(String str) // 将参数中的字符串str连接到当前字符串的后面,效果等价于"+"。

public static void main(String[] args) {
     String str = "123456789";
     String str1 = "爱党爱国,乐于助人";
     String str2 = "abc";
     String str3 = "ABC";

        System.out.println(str.concat(str1)); //123456789爱党爱国,乐于助人

    }

6、字符串中单个字符或字符串的查找
1)public int indexOf(int ch/String str)//用于查找当前字符串中字符或子串,返回字符或子串在当前字符串中从左边起首次出现的位置,若没有出现则返回-1。
2)public int indexOf(int ch/String str, int fromIndex)//改方法与第一种类似,区别在于该方法从fromIndex位置向后查找。
3)public int lastIndexOf(int ch/String str)//该方法与第一种类似,区别在于该方法从字符串的末尾位置向前查找。
4)public int lastIndexOf(int ch/String str, int fromIndex)//该方法与第二种方法类似,区别于该方法从fromIndex位置向前查找。
 

public static void main(String[] args) {
     String str = "123456789";
     String str1 = "爱党爱国,乐于助人";

        System.out.println(str.indexOf('5'));//4
        System.out.println(str.indexOf('3',1));//2
        System.out.println(str.lastIndexOf('5'));//4
        System.out.println(str.lastIndexOf('3',1));//-1
    }

7、字符串中字符的大小写转换
1)public String toLowerCase()//返回将当前字符串中所有字符转换成小写后的新串
2)public String toUpperCase()//返回将当前字符串中所有字符转换成大写后的新串

public static void main(String[] args) {
     String str = "123456789";
     String str1 = "abcdEFGH";

        System.out.println(str1.toLowerCase());//abcdefgh
        System.out.println(str1.toUpperCase());//ABCDEFGH

    }

8、字符串中字符的替换
1)public String replace(char oldChar, char newChar) //用字符newChar替换当前字符串中所有的oldChar字符,并返回一个新的字符串。
2)public String replaceFirst(String regex, String replacement)//该方法用字符replacement的内容替换当前字符串中遇到的第一个和字符串regex相匹配的子串,应将新的字符串返回。
3)public String replaceAll(String regex, String replacement)//该方法用字符replacement的内容替换当前字符串中遇到的所有和字符串regex相匹配的子串,应将新的字符串返回。
 

public static void main(String[] args) {
        String str = "Hello";
        String str1 = str.replace('e','E');//str1 = "HEllo"
        String str2 = str.replaceFirst("l","qw");//str2 = "Heqwlo"
        String str3 = str.replaceAll("l","df");//str3 = "Hedfdfo"
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
    }

9.string若干方法

1)String trim //忽略字符串前导和尾部的空格,返回字符串

String s = " Hello  ";
System.out.println(s.trim()); // s = "Hello"
2)isEmpty()  // 判断字符串是否为空。

String s = " Hello  ";
System.out.println(s.isEmpty()); // s = "false"
3) contains()  //判断是否包含指定的字符串

String s = " Hello  ";
System.out.println(s.contains("ll")); // s = "true"
4) char[] toCharArray() // 将此字符串转换为一个新的字符数组。

5)boolean startsWith(String prefix) // 测试此字符串是否以指定的子串开始。

6)  boolean endsWith(String prefix) // 测试此字符串是否以指定的子串结束。 

7)String[] split(String regex,int limit) // 根据匹配给定的正则表达式来拆分此字符串
 

有借鉴的地方~ 表示欢迎~

@2: stringbuffer和stringbuilder

我们在实际的开发中,如果需要进行字符串的频繁拼接,会出现以下问题:

java中的字符串是不可变的,每一次拼接都会产生新字符串。
这样会占用大量的方法区内存。造成内存空间的浪费。

==String为什么是不可变的?
源代码内,String类中有一个 byte[ ] 数组,这个byte[ ]数组采用了 final 修饰,

因为数组一旦创建长度不可变。并且被final修饰的引用一旦指向某个对象之后,不可再指向其它对象,所以String是不可变的!

所以"abc" 无法变成 “abcd”
 

因此引出StringBuffer和StringBuilder可变字符串!

==StringBuilder和StringBuffer为什么是可变的呢?
源代码内,StringBuffer和StringBuilder内部实际上是一个 byte[ ]数组,这个byte[]数组没有被final修饰,

StringBuffer和StringBuilder的初始化容量是 16,当存满之后会进行扩容,底层调用了数组拷贝的方法System.arraycopy()。所以StringBuilder和StringBuffer适合于使用字符串的频繁拼接操作。

注意:
StringBuffer和StringBuilder默认初始化容量为16个byte[] 数组
 

1,StringBuffer和StringBuilder的创建方法

public static void main(String[] args) {
        StringBuffer s1 = new StringBuffer();//创建一个容量为16的StringBuffer对象

        StringBuffer s2 = new StringBuffer("我是中国人");
        System.out.println(s2);

        StringBuffer s3 = new StringBuffer(100);//创建一个容量为100的StringBuffer对象
        StringBuilder s4 = new StringBuilder(100);//创建一个StringBuffer对象
    }

2. 优化StringBuffer和StringBuilder的性能?

在创建StringBuffer和StringBuilder的时候尽可能给定一个初始化容量。

最好减少底层数组的扩容次数。预估计一下,给一个大一些初始化容量。

关键点:给一个合适的初始化容量。可以提高程序的执行效率。

3.StringBuffer和StringBuilder的区别?

StringBuffer中的方法都有:synchronized 关键字修饰。表示StringBuffer在多线程环境下运行是安全的。

StringBuilder中的方法都没有:synchronized 关键字修饰,表示StringBuilder在多线程环境下运行是不安全的。

-StringBuffer是线程安全的。

-StringBuilder是非线程安全的。
 

4.方法(StringBuffer和StringBuilder构造方法和方法一样)

构造方法名
StringBuilder()
StringBuilder(int capacity)
StringBuilder(String str)

--StringBuilder append(char c)    在字符串尾巴追加字符
--int capacity()    当前StringBuffer/StringBuilder的容量
--char charAt(int index)    返回指定位置的字符
--StringBuilder delete(int start, int end)    删除[start, end)范围的字符
--StringBuilder deleteCharAt(int index)    删除指定位置的字符
--void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)    将字符串转换成char复制到dst数组中
--int indexOf(String str)    返回str第一次出现的位置
--int lastIndexOf(String str)    返回str最后一次出现的位置
--StringBuilder insert(int offset, char c)    在offset位置插入字符
--int length()    返回字符串长度
--StringBuilder replace(int start, int end, String str)    将[start, end)的内容替换成str
--StringBuilder reverse()    字符串翻转
--void setCharAt(int index, char ch)    将index位置的字符设置为ch
--String substring(int start)    从start开始截取字串
--String substring(int start, int end)    截取start到end - 1的字符串
--void setLength(int newLength)    设置StringBuffer/StringBuilder的长度,默认补空格,并自动扩充容量
--CharSequence subSequence(int start, int end)    和substring一样,只不过返回CharSequence
 


总结

--StringBuffer/StringBuilder可以看做 可变长度字符串。
--StringBuffer/StringBuilder初始化容量 16.
--StringBuffer/StringBuilder是完成字符串拼接操作的,方法名:append
--StringBuffer是线程安全的。StringBuilder是非线程安全的。
--频繁进行字符串拼接不建议使用“+”
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1031636.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号