JAVA之旅(十六)——String类,String常用方法,获取,判断,转换,替换,切割,子串,大小写转换,去除空格,比较
一.String概述
String时我们很常用的数据类型,他也是一个类的使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 1package com.lgl.hellojava;
2
3//公共的 类 类名
4public class HelloJJAVA {
5
6 public static void main(String[] args) {
7 /**
8 * String
9 */
10 /**
11 * s1是一个类类型变量,“abc”是一个对象 字符串最大的特点是,一旦被初始化,就不可以被改变
12 */
13 String s1 = "abc";
14 s1 = "kk";
15 System.out.println(s1);
16 }
17}
18
19
为什么说初始化之后不可以改变,我们又重新赋值,输出多少?肯定是kk,那不是变了吗?
- 这里注意,他是s1变了,但是这个abc这个对象还是abc
这个要搞清楚,s1开始指向的abc后来指向kk而已
我们再来对比一下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 1package com.lgl.hellojava;
2
3//公共的 类 类名
4public class HelloJJAVA {
5
6 public static void main(String[] args) {
7
8 String s1 = "abc";
9 String s2 = new String("abc");
10
11 System.out.println(s1 == s2);
12 System.out.println(s1.equals(s2));
13 }
14}
15
16
输出的结果?
我们可以发现,==是不正确的,因为他是比较地址,而equals,则是比较值
为什么?
- String类复写了object类中的equals方法,定义了自己独特的内容,该方法用于判断字符串是否相同
那s1和s2有什么区别?
- s1代表一个对象
- s2代表两个对象(new 和 abc)
二.String常用方法
我们知道了String的基本概述了,那我们就可以开始来学习他的一些常用的方法了,我们还是以例子为准
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 1package com.lgl.hellojava;
2
3//公共的 类 类名
4public class HelloJJAVA {
5
6 public static void main(String[] args) {
7
8 String s1 = "abc";
9 String s2 = new String("abc");
10
11 String s3 = "abc";
12
13 System.out.println(s1 == s2);
14 System.out.println(s1 == s3);
15 }
16}
17
18
这里大家知道输出的是什么嘛
s1 = s3 为true是因为当内存中存在了对象就不会再创建了
String是用于描述字符串事物,那么它就提供了多个方法的对字符串进行操作
常见的操作有哪些?我们来分析一下
-
1.获取
-
字符串中包含的字符数,也就是字符串的长度,也就是int length()获取长度
- 根据位置获取位置上的某个字符,也就是char charAt(int index)
- 根据字符获取该字符在字符串的位置 int indexOf(int ch),返回的是ch在字符串中第一次出现的位置
- int indexOf(int ch , int fromIndex):从fromIndex指定位置开始,获取ch在字符串中出现的位置
- 根据字符串获取该字符在字符串的位置 int indexOf(String str),返回的是ch在字符串中第一次出现的位置
- int indexOf(String str , int fromIndex):从fromIndex指定位置开始,获取ch在字符串中出现的位置
-
2.判断
-
字符串是否包含某一个子串
boolean contains(str):判断字符串是否存在
特殊之处:indexOf(str)可以索要str第一次出现的位置,返回-1的话,表示str不再字符串中存在,索要,也可以用于对指定判断是否包含,if(str.indexOf(“aa”) != -1)
1
2 1* 字符串中是否有内容
2
Boolean isEmpty():原理就是判断长度是否为0
1
2 1* 字符串是否是以指定的内容开头
2
boolean startWith(String str)
1
2 1* 字符串是否是以指定的内容结尾
2
boolean startWith(String str)
-
3.转换
-
将字符数组转换成字符串
构造函数String(char [])
构造函数(char [] , offset ,count)将字符数组中的一部分转成字符串
静态方法static String copyValueOf(char [] )
静态方法static String copyValueOf(char [],int offset,int count )
1
2 1* 将字符串转换成字符数组
2
char [] toCharArray()
1
2 1* 讲字节数组转成字符串
2
构造函数String(byte[])
构造函数(byte[] , offset ,count)将字节数组中的一部分转成字符串
1
2 1* 将字符串转成字节数组
2
byte [] getBytes()
1
2 1* 将基本数据类型转换成字符串
2
String valueOf(xxx);
-
4.替换
-
String replace(oldchar,newchar);
-
5.切割
-
String [] split(regex);
-
6.子串
获取字符串中的一部分
String subString(begin)
String subString(begin,end)
-
7.大小写转换,去除空格,比较
-
将字符串转换成大小写
String toUuperCase()
String toLowerCase();
1
2 1* 将字符串两端的多个空格去掉
2
String trim();
1
2 1* 对两个字符串进行自然顺序的比较
2
int compareTo(String)
我们可以对获取做一个小演示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 1package com.lgl.hellojava;
2
3//公共的 类 类名
4public class HelloJJAVA {
5
6 public static void main(String[] args) {
7
8 method_get();
9
10 }
11
12 /**
13 * String操作演示
14 */
15 public static void method_get() {
16 String str = "abcdef";
17
18 //长度
19 sop(str.length());
20 //根据索引获取字符
21 //当访问到字符串中不存在角标的时候会发生错误:StringIndexOutOfBoundsException角标越界
22 sop(str.charAt(3));
23 //根据字符获取索引
24 //没有角标不会报错,返回-1
25 sop(str.indexOf('d'));
26
27 //反向索引一个字符出现的位置
28 sop(str.lastIndexOf('c'));
29 }
30
31 // 输出语句
32 public static void sop(Object obj) {
33 System.out.println(obj);
34 }
35}
36
37
输出的结果
我们再来看看判断的小例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14 1 /**
2 * 判断
3 */
4 public static void method_is() {
5 String str = "LiuGuiLin";
6 // 判断是以Liu开头
7 sop(str.startsWith("Liu"));
8 // 判断是以Lin结尾
9 sop(str.endsWith("Lin"));
10 // 判断是否存在Gui
11 sop(str.contains("Gui"));
12
13 }
14
我们的输出
字符串和字节数组在转换过程中是可以指定编码表,我们可以看一下转换的小例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 1
2 /**
3 * 转换
4 */
5 private static void method_trans() {
6 // 字符数组
7 char[] arr = { 'a', 'b', 'c', 'd', 'e', 'f', 'g' };
8 // 转换成字符串
9 String str = new String(arr);
10 sop("str = :" + str);
11
12 // 截取
13 String str1 = new String(arr, 1, 3);
14 sop("str1 = :" + str1);
15
16 String str3 = "ddvdvdv";
17 char[] arr3 = str3.toCharArray();
18 for (int i = 0; i < arr3.length; i++) {
19 sop("arr3 = :" + arr3[i]);
20 }
21 }
22
我们再来看下替换的方法
1
2
3
4
5
6
7
8
9
10
11
12
13 1/**
2 * 替换
3 */
4 public static void method_replace() {
5 String s = "Hello JAVA";
6
7 // 替换
8 String s1 = s.replace('J', 'A');
9 //如果要替换的字符不存在,返回的还是原串
10 //当然,也可以替换字符串,这里就不演示了
11 sop(s1);
12 }
13
输出的结果
当然,也是可以替换字符串的,这里就不演示了
我们再来看切割的小例子
1
2
3
4
5
6
7
8
9
10
11
12 1/**
2 * 切割
3 */
4 public static void method_split() {
5 String string = "zhangsan,lisi,wangwu";
6 // 切割
7 String[] arr = string.split(",");
8 for (int i = 0; i < arr.length; i++) {
9 sop("arr = :" + arr[i]);
10 }
11 }
12
这里我们按照逗号区分
我们再来看下子串
1
2
3
4
5
6
7
8
9
10 1 /**
2 * 子串
3 */
4 public static void method_sub() {
5 String ss = "ferfefqwdqXXFV";
6 sop(ss.substring(2));
7 sop(ss.substring(2, 5));
8
9 }
10
好了我们再来演示最后几个方法的功能来结束本篇博客
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 1/**
2 * 最后几个
3 */
4 public static void method_7() {
5
6 String st = " Hello Java And Android ";
7
8 // 转换大写
9 sop(st.toUpperCase());
10 // 转换小写
11 sop(st.toLowerCase());
12 //去掉空格
13 sop(st.trim());
14
15 //比较
16 String st1 = "acc";
17 String st2 = "aaa";
18 //一个相同
19 sop(st1.compareTo(st2));
20
21
22 }
23
OK,这个也没什么可难的,输出
好的,本篇博客就先到这里了