java字符串

简介: 字符串不是java基本的数据类型,而是java标准库中的一个String类,每个用双引号引起来的字符串就是String类的一个实例。

字符串不是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);
 }

打印结果:

abc
def
hig

特殊的字符需要转义,比如,.本身是正则表达式中的占位符,使用\转成英文实心句号:

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);
 }

打印结果:

a
b
你
好

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,线程不安全,但是速度快。

目录
相关文章
|
22天前
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
137 83
|
4月前
|
安全 Java API
【Java字符串操作秘籍】StringBuffer与StringBuilder的终极对决!
【8月更文挑战第25天】在Java中处理字符串时,经常需要修改字符串,但由于`String`对象的不可变性,频繁修改会导致内存浪费和性能下降。为此,Java提供了`StringBuffer`和`StringBuilder`两个类来操作可变字符串序列。`StringBuffer`是线程安全的,适用于多线程环境,但性能略低;`StringBuilder`非线程安全,但在单线程环境中性能更优。两者基本用法相似,通过`append`等方法构建和修改字符串。
74 1
|
1月前
|
存储 安全 Java
Java零基础-字符串详解
【10月更文挑战第18天】Java零基础教学篇,手把手实践教学!
106 60
|
22天前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
53 26
|
26天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
44 8
|
1月前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
48 6
|
2月前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
57 15
|
2月前
|
Java
JAVA易错点详解(数据类型转换、字符串与运算符)
JAVA易错点详解(数据类型转换、字符串与运算符)
53 4
|
3月前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
55 3
下一篇
DataWorks