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

一篇文章——教会你Java中的字符串类

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

一篇文章——教会你Java中的字符串类

Java中的字符串详解

文章目录
  • Java中的字符串详解
  • 前言
  • 一、字符串
    • 1.字符串的构造
    • 2.字符串的特点
    • 3.格式化字符串
  • 二、字符串类的使用(功能)
    • 1.字符串的比较
    • 2.字符串长度,字符以及组合字符串
    • 3.获取子串
    • 4.字符串的转换,替换与分隔
    • 5.获取字符串中特定字符或子串的位置
    • 6.字符串与基本类型之间的转换
      • (1)将字符串转换为基本类型
      • (2) 将基本类型转换为字符串
    • 7.字符类Character
    • 8.StringBuilder/StringBuffer类
      • (1)StringBuilder类的构造方法
      • (2)StringBuilder类修改字符串的方法
      • (3)StringBuilder类其他一些获取属性的方法
  • 总结


前言
字符串(String)是由字符构成的一个序列,在许多语言中,字符串常常作为一个
字符数组来处理,比如在C语言中,我们经常用char数组或者char指针数组来定义
字符串。但是在Java中,字符串是一个对象。Java定义了字符串类String,接下来
让我们了解一下这个类。

一、字符串 1.字符串的构造

可以使用字符串直接量或字符数组创建一个字符串对象。
何为字符串直接量呢?
其实就是用双引号括起来的任何字符。

使用字符串直接量的话有两种方法,
第一种:

String s = new String("welcome to java");
这里使用的是字符串类的构造方法,创建一个String对象s

第二种:

 String  s = "welcome to java";
 由于Java可以将字符串直接量看作string对象,所以上面的语句是正确的
 实际上我们习惯于用第二种,因为它更方便。

使用字符数组:

 char[] c = {'w','e','l','c','o','m','e',' ',
 	't','o',' ','j','a','v','a'};
 String s = new String(c);
2.字符串的特点

不可变性:

String s = "java";
String s = "html";
String对象是不可变的 ,它的内容是不能改变的。
以上的代码首先创建了一个内容为“Java”的String对象,将其赋值给s。
接着又创建一个内容为“html"的String对象,将其赋值给s。
赋值后第一个String对象仍然存在,但是不能在访问它了,因为现在的s
指向了新的对象。

限定性:

因为字符串在程序设计中是不可变的,但同时又会频繁地使用,所以Java虚拟机(JVM)
为了节约内存,对具有相同字符串序列的字符串直接量使用同一个实例。
String s1 = "welcome to java";
String s2 = new String("welcome to java");
String s3  = "welcome to java";
System.out.println("s1 == s2 is " + s1 == s2);
System.out.println("s1 == s3 is " + s1 == s3);

结果如下:

s1 == s2 is false
s1 == s3 is true

看到这里大家是不是很疑惑,脑子里瞬间多了???为什么s1和s2不相等呢?它们俩明明是相同的字符串序列啊?
原因呢,是因为直接定义一个字符串和new一个字符串对象的内存不在同一个地方。具体说明看这个:链接:传送门

3.格式化字符串

String类中有一个静态的format()方法,它可以创建一个格式化的字符串。具体用法如下:

语法:
	String.format(format,item1,item2,item3,...,itemk);
例如:
	String s = String.format("%5.2f",45.556);//s = 45.56

二、字符串类的使用(功能)

下面小编直接上图了,常用的会另外说明的哦
考虑到有小伙伴看不懂图,所以现在这里介绍一下:

UML类图(拿下面第一个图第一个方法说明)
	第一行是类名:java.lang.String
	图中“ + ”号表示公共的,同理,“ - ”号表示私有的,不可访问的。
	+equals(s1: String): boolean中:
	s1是参数名,String是参数名的类型,boolean是返回值类型。
1.字符串的比较


这里要说明的是我们常容易用 == 运算符来比较字符串,其实它比较的是字符串变量是否指向同一个对象。其实就是上面介绍的字符串的特点中的限定性(这不就联系起来啦嘛)。例如:

 String s1 = "welcome to java";
 String  s2 = "welcome to java";
 String s3 = new String("welcome to java");
 String s4 = "good day";
 System.out.println(s1 == s2);//这里会输出true
 System.out.println(s1 == s3);//这里会输出false
 System.out.println(s1 == s4);//这里会输出false

如果我们要比较内容的话,可以使用上图的equals和compareTo方法。具体用法如下(注:这里继承上面定义的变量):

//s1.equals(s2)方法返回boolean类型,如果s1和s2的内容相同,返回true,否则返回false
System.out.println(s1.equals(s2));//true
System.out.println(s1.equals(s3));//true
System.out.println(s1.equals(s4));//false


System.out.println(s1.compareTo(s2));//0
System.out.println(s1.compareTo(s3));//0
System.out.println(s1.compareTo(s4));//因为按照字典码的顺序s1大于s4,
//且s1和s2第一个字符不同,w和g,两者相差16,所以返回一个大于0的数,16

String s5 = "zhang san";
System.out.println(s1.compareTo(s5));//按照字典码的顺序s1小于s5,
//且s1和s2第一个字符不同,w和z,两者相差3,所以返回一个小于0的数,-3

下面是上述代码的运行结果:

2.字符串长度,字符以及组合字符串


这里先说明一下,前两个最好记下来

(1)
Java里提供了获取字符串和数组的长度方法,在此区别一下这两种方法:

获取字符串s的字符个数使用s.length()
获取数组a的元素个数使用a.length

(2)

由于Java允许在不创建新变量的情况下,使用字符串直接量直接引用字符串。
所以,我们还可以这样:
	 "welcome to java".charAt(0);
它返回w。

charAt()方法获取字符串中特定下标的字符,我们可以用这个方法干什么呢?
可以用这个方法获取字符后,再使用字符character类中的各种方法来操作获取到的字符。至于例子呢,等稍后介绍了character类后再来举叭(这里我们要记住字符串类中有一个和字符character类有关系的方法)。

(3)
concat()方法可以连接两个字符串,例如:

		String s3 = s1.concat(s2);

这条语句将s1和s2连接构成新字符串s3(将s2追加到s1后面)。

因为我们会经常用到字符串的连接,所以为了方便,Java可以使用加号(+)连接两个和更多的字符串。这里说个小技巧:

我们使用加号(+)来连接两个或多个基本类型数据的时候是会直接计算的。
而连接字符串的时候是连接内容的。所以我们可以这样:
			int a = 4;
			String s = a + "";
就把一个基本类型转换成了字符串类型。于是,我们得到:
			字符串+基本数据类型=字符串
3.获取子串


这里就不多说了,注意参数的下标别出界就行。

4.字符串的转换,替换与分隔

(1)

字符串一经创建,其内容就不能改变。所以以上方法会返回一个源自原字符串的新字符串。

(2)
通过指定某个模式来匹配,分隔,替换一个字符串。这种模式通常成为正则表达式。是一个非常强大的字符串匹配工具,不过就是有点复杂。小伙伴们可以自行百度,为什么呢?因为在下也不会呗。

5.获取字符串中特定字符或子串的位置


以上方法返回特定字符或子串的下标。

6.字符串与基本类型之间的转换 (1)将字符串转换为基本类型

Java为每一种基本类型提供了一个包装类,在java.lang中。除了char和int的包装类名分别叫Character和Integer外,其他的包装类名都是基本类型的首字母大写。每种包装类里都有一个parse的方法来将字符串转换为与其对应的类型(除了character类)。例如:

String s = "5";
int a = Integer.parseInt(s);
double b = Double.parseDouble(s);
System.out.println(a);//5
System.out.println(b);//5.0

我们使用String类中的toCharArray()方法来将字符串转换为字符数组类型:

String s = "java";
char[] chars = s.toCharArray();//chars = {'j','a','v','a'}
(2) 将基本类型转换为字符串


还有一种方法是每个基本类型的包装类中的toString()方法。

7.字符类Character


字符类可以对字符进行操作,这里我们接着第2节String的charAt()方法来介绍,例如:

        String s = "welcome to java";
        if(Character.isLowerCase(s.charAt(5))){
            System.out.println(Character.toUpperCase(s.charAt(5)));
        }

运行结果为 M

8.StringBuilder/StringBuffer类

由于String类对象一经创建内容就不能再更改了,所以当我们需要更改时就得使用StringBuilder/StringBuffer类了。这两个类是可以代替String类的另一种处理字符串的解决方案。
其中,StringBuilder类适合用于单任务访问;而StringBuffer类适合用于多任务并发,并且StringBuffer类与StringBuilder类相比,它修改缓冲区的方法是同步的。除了这些以外,这两个类几乎是完全一样的。所以,这里小编介绍StringBuilder类。

(1)StringBuilder类的构造方法

(2)StringBuilder类修改字符串的方法

这里要注意的是改变StringBuilder字符串生成器中的内容之后,返回的对象仍然是这个字符串生成器,并且内容改变了,例如:

        StringBuilder s1 = new StringBuilder("welcome to java");
        StringBuilder s2 = s1.reverse();
        System.out.println(s1 == s2);//true

因为返回的是原来的对象,所以s1和s2指向同一个对象。

(3)StringBuilder类其他一些获取属性的方法

在这介绍之前,小编先让大家看一下这个情况:

        char[] a = new char[2];
        a[0] = '0';
        for(int  i = 0;i != a.length;i++){
            System.out.println(a[i]);
        }

运行结果如下:

注意这里是0和一个换行符,也就是说,一个字符数组(必须是字符数组!!)定
义以后,有元素的会显示(0也是元素),没有元素的不会显示。
只能说存在这个位置,但没有任何元素。

capacity()返回字符串生成器当前的容量。容量是指在不增加生成器大小的情况
下,能够存储的字符数量。在计算机内部,字符串生成器是一个字符数组,所以
容量就是数组的大小,也就是长度。生成器的容量会自动增加的:如果在没有设
置新长度的情况下,追加一个字符串后超出了生成器的容量,就用新数组代替原
来的数组,新数组大小 = (原来数组长度 + 1)x 2。

length()方法返回字符串生成器实际存储的字符数量。
setLength( newLength )方法设置字符串生成器的长度。

如果新长度newLength小于生成器的当前长度(不是容量!!!),那就会把生成器截短到新设置的长度;
如果新长度newLength大于生成器的当前长度,那就会在生成器上追加足够多的null字符(这里的原因就是上面介绍的啦,追加后会显示的),
使其长度成为新设置的长度。


总结

好了,这里就全都介绍完了。第一次写,不足之处还请指教。
最后认识一下吧,我是北迁。一名正在努力ing的大一学生。hhh~~~

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

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

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