博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java字符串
阅读量:6177 次
发布时间:2019-06-21

本文共 3191 字,大约阅读时间需要 10 分钟。

字符串不是java主要的数据类型,而是java标准库中的一个String类。每一个用双引號引起来的字符串就是String类的一个实例。如:String name="Tonny"

1.字符串的构造

第一种方式:

String name="Tonny"

另外一种方式:

String name=new String("Tonny");

第三种方式:

byte[] arr = {
65, 66, 67, 68}; String s = new String(arr); //s=ABCD

第四种方式:

byte[] arr = {
65, 66, 67, 68,69};String s = new String(arr, 1, 4); //s=BCDE

2.子串

使用substring能够从一个较大的字符串中提取一个子串。比方:

String greeting="HelloWorld!"; System.out.println(greeting.substring(2));//llo World! System.out.println(greeting.subSequence(2, 6));//lloW

substring() 接受一个參数时,參数为子串開始位置,字符串从0開始计算位置。

substring()接收2个參数时分别为開始位置和结束位置,截取的字符串包括開始位置不包括结束位置。

3.拼接

使用”+”能够拼接2个字符串。

比如。

String str1="Hello"; String str2="World!"; String str3=str1+str2; System.out.println(str3);//HelloWorld

一个字符串和和一个非字符串进行拼接时,后者被转换为字符串类型。在java中不论什么一个字符串对象都能够转换为字符串。

4. 不可变字符

java中没有改动字符串的方法,java使用拼接再赋值的方式来实现字符串的改动。原来的字符串仍然存在,仅仅是变量指向了新的字符串而已。

hello永远是包括h、e、l、l、o的代码单元序列。

5.检查字符串是否相等

这个问题常常出如今各种笔试、面试题中。

字符串的equals方法用来检查2个字符串的值是否相等,==比較的是2个字符串的地址是否同样,即是否指向的是同一个字符串。

使用substring、+截取或者拼接的字符串尽管内容一样,可是地址不一样。

String a="ucas"; String b=a.substring(0,3)+"s"; System.out.println("ucas".equals(a));//true System.out.println(a.equals(b)); //true System.out.println(a==b);  //false

6.空串与Null串

空串是一个String 对象,内容为空。长度为0。

null表示没有对象和它关联。

推断一个字符串对象是不是为空串:

if(str.length==0)或者if(str.equals(""))

检查一个对象既不为null也不为空:

if(str!=null&&str.length!=0)

7.字符串Api

  • boolean endwith()推断字符串后缀
  • equalIgnoreCase()忽略大写和小写比較
  • int indexOf() 子串首次出现位置
  • int lastIndexOf() 返回字符串最后一次出现位置
  • int length() 返回字符串长度
  • boolean startWith(prefix)推断字符串是否以prefix开头
  • String toLowerCase 转为小写
  • String toUpperCase 转为大写
  • String trim()删除尾部空格

8.字符串的本质

地址比較:

字符串”abc”在常量池中,s1和s2指向的是同一个对象,因此不论是比較地址还是比較值结果都是一样的。

String s1 = "abc";  String s2 = "abc";  System.out.println(s1 == s2);  //true  System.out.println(s1.equals(s2));  //true

再看以下的样例:

String s1 = "abc";   String s2 = new String("abc");   System.out.println(s1 == s2);        //false   System.out.println(s1.equals(s2));   //true

这时,s1指向的是字符串常量池中的”abc”。s2是字符串对象,位于堆内存中,因此s1和s2的地址不一样,不是同一个对象,字符串值一样。

9 字符串切分

String str1 = "abc,def,hig"; String[] strArr = str1.split(","); for(String str:strArr){    System.out.println(str); }

打印结果:

abcdefhig

特殊的字符须要转义,比方,.本身是正則表達式中的占位符,使用\转成英文实心句号:

String str1 = "abc.def.hig";String[] strArr = str1.split("\\.");

10.字符串转字符数组

String s = "ab你好"; char[] cArr = s.toCharArray(); for (char c : cArr) {     System.out.println(c); }

打印结果:

ab你好

11.字符串按字典顺序排序

使用TreeSet:

String[] strArr = {
"recursive", "raw", "platform", "rank", "register", "symbol"};TreeSet treeSet = new TreeSet<>();for (String str : strArr) { treeSet.add(str);}System.out.println(treeSet);

12.按字典顺序逆序排序

逆序排序仅仅须要在TreeSet实现Comparator接口,重写compare()方法:

String[] strArr = {
"recursive", "raw", "platform", "rank", "register", "symbol"};TreeSet treeSet = new TreeSet<>(new Comparator() { @Override public int compare(Object o1, Object o2) { return o2.toString().compareTo(o1.toString()); } }); for (String str : strArr) { treeSet.add(str); } System.out.println(treeSet);

结果:

[symbol, register, recursive, raw, rank, platform]

13.StringBuffer和StringBuilder

StringBuffer是字符串缓冲区, 线程安全,单线程操作单时候也要不停的推断锁,后来独立出来一个StringBuilder,线程不安全。可是速度快。

转载地址:http://tmwda.baihongyu.com/

你可能感兴趣的文章
快速瓶颈识别
查看>>
运维工作总结201403
查看>>
我是菜鸟我加油……mysql主从同步
查看>>
[体系结构]设计模式(五)
查看>>
分布式文件系统
查看>>
其实很简单 微星为你详解Z77主板BIOS设置
查看>>
在Ubuntu Kylin下安装JDK1.8
查看>>
Hadoop 学习一
查看>>
Linux中生成/etc/shadow的加密密码
查看>>
《gcc五分钟系列》第三节:-o选项
查看>>
批量检测主机存活状态
查看>>
解决 error: gnu/stubs-32.h: No such file or directory
查看>>
imread 函数 的相关细节
查看>>
分布式和事务
查看>>
C#学习常用类(1002)---KeyValuePair<TKey, TValue> 结构
查看>>
浅谈grep命令查找匹配内容的使用、参数、正则
查看>>
磁盘配额
查看>>
UserInputControls用户输入控制
查看>>
我的友情链接
查看>>
Nginx+Lua架构开发目录贴
查看>>