String常用操作
2018-09-05 07:47:38来源:博客园 阅读 ()
常量池:
字符串一旦被初始化就不会被改变
String s="123"; s="abc"; System.out.print(s);
这段代码看上去s的值是被改变了的,实际上123就是一个对象,他存在于常量池中,abc也是一个对象,s的值实际上是指向123或者abc的地址。
所以当我们使用String s="123";来定义字符串的时候,会先查看常量池中是否有123,有就直接赋值123的地址,如果没有就创建123。
1 String s="123"; 2 String s1=new String("123"); 3 System.out.println(s==s1); 4 System.out.print(s.equals(s1));
结果:
false
true
2中,实际上是创建了两个对象,一个new,一个堆内存中。equals本来和==一样是比较地址值得,但是String类重写了equals方法,比较的是内容。
获取
1.1获取字符串中字符的长度(个数)
int length()
1.2根据位置获取字符
char charAt(int index)
1.3根据字符(子串)获取其在字符串中第一次出现的位置
char indexOf(int ch)
char indexOf (int ch,int fromIndex)从指定位置进行查找
char indexOf(String str)
char indexOf (String str,int fromIndex)
上面的是从前向后找,下面的是从后向前找
char lastIndexOf(int ch)
char lastIndexOf (int ch,int fromIndex)从指定位置进行查找
char lastIndexOf(String str)
char lastIndexOf (String str,int fromIndex)
1.4获取字符串中的子串
String substring(int beginIndex,int endInedx)包含befin不包含end
String substring(int beginIndex)
转换
1.1将字符串变成字符串数组
String[] split(String regex) 这里的切割点有时会涉及到正则表达式,所以要用\将特殊字符转化成普通字符。注意\.也是正则规则中的一部分
public class Text { public static void main(String[] args){ String s="张三.李四.王五"; String[] arr=s.split("\\."); for(int i=0;i<arr.length;i++) System.out.println(arr[i]); } }
1.2将字符串变成字符数组
char[] toCharArray();
1.3将字符串变成字节数组
byte[] getBytes();
1.4将字符串中的字母转换大小写
String toUpperCase();
String toLowerCase();
1.5将字符串中的内容进行互换
String replace(String oldst,String newst) String replace(char oldch,char newch)
1.6将字符串两端的空格去掉
String trim();
1.7将字符串进行连接
String concat(String);
判断
1.1比较两个字符串是否相同
boolean equals(anObject)
boolean equalsIgnoreCase(anotherString)不区分大小写
1.2判断字符串中是否包含指定字符串
boolean contains(String str)
1.3字符串是否以指定字符串开头(结尾)
boolean startsWith(String)
boolean endsWith(String)
1.4比较两个字符串的字典顺序大小
int compareTo(anotherString);
int compareToIgnoreCase(anotherString)不区分大小写
intern
-
当调用intern方法时,如果池已经包含与
equals(Object)
方法确定的相当于此String
对象的字符串,则返回来自池的字符串。 否则,此String
对象将添加到池中,并返回对此String
对象的引用。(实际上就是看对象的值123在池当中有没有,如果没有那我就在池中创建一个,如果有那我就直接拿来用)
public class Text { public static void main(String[] args){ String s=new String("123"); String s1=s.intern(); String s2=s1.intern(); System.out.println(s==s1); System.out.println(s1==s2); } } 结果 false true
StringBuffer
就是字符串缓冲区,用于存储数据的容器
特点:1长度是可变的
2可以存储不同数据类型
3最终要转成字符串进行使用
4可对字符串进行修改
既然是个容器那么它具备什么功能呢?
1添加
StringBuffer append(data)在结尾进行添加
StringBuffer insert(index,data)在指定位置插入
public class Text { public static void main(String[] args){ StringBuffer s=new StringBuffer(); s.append("1").append("2").append("b"); s.insert(1, "a"); System.out.println(s); } }
结果:1a2b
2删除
StringBuffer delete(start,end);包含头不包含为尾 StringBuffer deleteCharAt(int index);删除指定位置的元素
3查找
char charAt(index)返回指定位置字符
int indexOf(str);返回子串第一次出现的位置
int kastIndexOf(str)从字符串末尾开始查询
4修改
StringBuffer replace(start, end, str);
void setCharAt(index, ch);只修改一个字符。注意它没有返回值类型
5
StringBuffer reverse();将字符串头尾进行对调
new StringBuffer()初始化的默认长度为16
new StringBuffer(index)可以指定其初始化的长度(如果可以确定数据的大小,最好使用这个,可以避免开辟空间和进行运算)
StringBuilder
jdk1.5以后出现了功能和StringBuffer一模一样的对象,即Stringbuilder
不同的是:
Stringbuilder是线程不同步的,通常用于单线程,效率高,因为不用每次都判断锁。
StringBuffer线程同步,通常用于多线程,安全。(如果删除和添加同时进行了,那么就会造成安全隐患)
Object lock; public StringBuffer append(int x){ synchronized(lock){ } } public StringBuffer delete(int start,int end){ synchronized(lock){ } }
JDK升级的目的:
1简化书写
2提高效率
3增加安全性
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Java基础——String
- 学习Java 8 Stream Api (4) - Stream 终端操作之 collect 2020-06-11
- Java 必须掌握的 12 种 Spring 常用注解! 2020-06-08
- java里面main方法中的String[]args 2020-06-07
- JAVA中常用的类 2020-06-05
- JVM系列之.JVM内存模型如何正确运用操作?本文详解 2020-06-04
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash