String类和StringBuffer/StringBuilder常用方法

关Java JDK中内置的一个类:java. lang. String的介绍

1、String表示字符串类型,属于引用数据类型,不属于基本数据类型。
2、在java 中随便使用双引号括起来的都是String对象。例如: “abc”,“def”, “hello world!” ,这是3个String对象。
3、java 中规定,双引号括起来的字符串,是不可变的,也就是说"abc"自出生到最终死亡,不可变,不能变成"abcd",也
4、在JDK 当中双引号括起来的字符串,例如: “abc” “def” 都是直接存储在“方法区”的“字符串常量池”当中的。
为什么SUN公司把字符串存储在一个“字符串常量池”当中呢。因为字符串在实际的开发中使用太频繁。为了执行效率,
所以把字符串放到了方法区的字符串常量池当中。
对string在内存存储方面的理解:
第一:字符串一旦创建不可变。
第二:双引号括起来的字符串存储在字符串常量池中。
第三:字符串的比较必须使用equals方法。
第四: string已经重写了tostring ()和equals()方法。

String类常用的方法

1.endsWith:判断字符串是否以指定的后缀结束

//判断当前字符串是否以某个字符串结尾 返回ture或者false
System.out.println("test.txt".endsWith(".java"));//false
System.out.println("test.txt".endsWith(".txt"));//true
System.out.println("abcdefg".endsWith("efg"));//true

2.startsWith,判断字符串是否以指定的前缀开始

//判断某个字符串是否以某个子字符串开始
System.out.println("abcdef".startsWith("abc"));//true
System.out.println("abcdef".startsWith("abd"));//false
  1. equals,字符串相等比较,不忽略大小写
//比较两个字符串必须使用equsl方法,string类的equls方法已经重写好了,所以比较的是内容
//eqlusl方法有没有调用compareTo方法
System.out.println("abc".equals("abc"));//true
  1. equalsIgnoreCase,字符串相等比较,忽略大小写
//判断两个字符串是否相等忽略大小写
System.out.println("Abc".equalsIgnoreCase("aBC"));//true
  1. indexOf,取得指定字符在字符串的位置
//判断某个子字符串在当前字符串中第一次出现处的索引(下标)
System.out.println("phpjavaokhuobi".indexOf("java"));//3
  1. lastIndexOf,返回最后一次字符串出现的位置
System.out.println("abcdefg".lastIndexOf("efg"));//4
  1. length,取得字符串的长度
//判断字符串长度 用的是length方法 判断数组长度是lenght属性
System.out.println("abcde".length());//5
  1. replaceAll,替换字符串中指定的内容
//替换字符串
String e = "http://wwww.baidu.com".replace("wwww","xxxx");//http://xxxx.baidu.com
System.out.println(e);
String f = "111".replace("1", "2");//222
System.out.println(f);
  1. split,根据指定的表达式拆分字符串
//拆分字符串成数组
String[] ym = "abcde-fkglgl-asdas".split("-");
for ( int i = 0 ; i < ym.length ; i++)
    System.out.println(ym[i]);
    //abcde  //fkglgl  //asdas
//可以继续向下拆分
  1. substring,截子串,左边包含 右边不包含
//截取字符串 参数是截取开始下标
System.out.println("www.baidu.com".substring(4));//baidu.com
System.out.println("www.baidu.com".substring(4, 9));//左边包含 右边不包含 baidu
  1. trim,去前后空格
//去除字符串前后空白
System.out.println("     abc   edsada   ".trim());//abc
  1. valueOf,将其他类型转换成字符串
//String 中有一个方法是静态的,不需要new对象;
//将非字符串转化成字符串
String s1 = String.valueOf(100);
System.out.println(s1);//100字符串
  1. contains,判断前边这个字符串包含不包含后边这个字符串,可以看出是连续的字符串是否包含
//判断前边这个字符串包含不包含后边这个字符串
System.out.println("HelloWorld.java".contains(".java"));//true
System.out.println("www.baidu.com".contains("badu"));//false

15.isEmpty 判断某个字符串是否内容为空

//判断某个字符串是否为空
String s= "";
String d = "1";
System.out.println(s.isEmpty());//true
System.out.println(d.isEmpty());//false

16.toLowerCase() 将大写字符串转换成小写

//将大写字符串转换成小写
System.out.println("ABC".toLowerCase());

17.toCharArray() 把字符串转换成char 数组

//吧字符串转换成char 数组
char [] c = "我是中国人".toCharArray();
for ( int i = 0 ; i < c.length ; i ++)
    System.out.println(c[i]);

StringBuffer和StringBulider

StringBuffer称StringBuilder的区别?
StringBuffer中的方法都有: synchronized关键字修饰。StringBuffer在多线程环境下运行是安全的。
StringBuilder中的方法都没有: synchronized关键字修饰,表StringBuilder在多线程环境下运行是不安全的。
如何优化StringBuffer的性能?
在创建StringBuffer的时候尽可能给定-个初始化容量。
最好减少底层数组的扩容次数。预估计一下,给一个大一些初始化容量。
思考:我们在实际的开发中,如果需要进行字符串的频繁拼接,会有什么问题?
因为java中的字符串是不可变的,每- -次拼接都会产生新 字符串。
这样会占用大量的方法区内存。造成内存空间的浪费。
String s = “abc”;
s += “hello”;
就以_上两行代码,就导致在方法区字符串常量池当中创建了3个对象:
“abc” .
“hello”
“abchello”
StringBuffer是字符串缓冲区,是一个容器。
特点:

1,长度是可变化的。
2,可以字节操作多个数据类型。
3,最终会通过toString方法变成字符串。
常用方法
StringBuffer() 构造一个字符串缓冲区,其中没有字符,初始容量为16个字符。
append​ 添加boolean,String,Int 等等…参数的字符串表示形式追加到序列中。
substring​(int start, int end) 返回一个新的 String ,其中包含当前包含在此序列中的字符的子序列。
Insert ​向字符串中插入各种类型的数据
等可以参考帮助文档

相关面试试题

下面总共几个对象
String s1 = new String( original: “he11o”);
String s2 = new String( original: “hel11o”);
一共3个对象:
方法区字符串常量池中有1个: “hello”
堆内存当中有两个String对象。一共3个。

字符串不可变是什么意思?
是说双引号里面的字符串对象一且 创建不可变。
String s = “abc”;
s变量是可以指向其它对象的。字
符串不可变不是说以上变量s不可变。说的是"abc ”这个对象不可变
S = “xyz”;
判断数组长度和判断字符串长度不一样
判断数组长度是Length属性,判断字符串长度是length()方法。.
System. out . println(“abc” .1ength()); // 3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值