7.String
API
API概述
API(Application Programming Interface): 应用程序编程接口
java API: JDK中提供的各种功能的java类, 封装了底层的实现, 无需关心如何实现, 只需要学习如何使用.
java帮助文档的使用.
- 查看构造方法
- 查看成员方法
package string;
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入一句话:");
String line = s.nextLine();
System.out.println("输入的话是:" + line);
}
}
String
概述
String在java.lang中,所以使用的时候不需要导包
String代表字符串,java中所有双引号字符串,都是string类的对象
特点:
- 字符串不可变,创建后不能被更改
- 虽然String的值是不可变的, 但是他们可以被共享
- 字符串效果上相当于字符串组(char[]), 但是底层原理是字节数组(byte[])
String构造方法
方法名 | 说明 |
---|---|
public String() | 创建一个空白字符串对象, 不含有任何内容 |
public String(char[] chs) | 根据字符数组的内容,来创建字符串对象 |
public String(byte[] bys) | 根据字节数组的内容, 来创建字符串对象 |
String s = "abc"; | 直接赋值的方式创建字符串对象, 内容就是abc |
示例
package string;
/*
构造方法:
1.public String() 创建一个空白字符
2.public String(char[] chs): 根据字符数组内容,创建字符串对象
3.public String(byte[] bys): 根据字节数组创建字符串对象
4.String s = "abc";直接赋值的方式创建字符串对象, 内容就是abc
推荐:
直接使用赋值的方式获得字符串
*/
public class StringDemo {
public static void main(String[] args) {
// public String() 创建一个空白字符
String s1 = new String();
System.out.println("s1:" + s1);
// public String(char[] chs): 根据字符数组内容,创建字符串对象
char[] chs = {'a', 'b', 'c'}; // 字符用单引号, 字符串用双引号
String s2 = new String(chs);
System.out.println("s2:" + s2);
// public String(byte[] bys): 根据字节数组创建字符串对象
byte[] bys = {97, 98, 99};
String s3 = new String(bys);
System.out.println("s3:" + s3);
// String s = "abc";直接赋值的方式创建字符串对象, 内容就是abc
String s4 = "abc";
System.out.println("s4:" + s4);
}
}
String对象特点
- 通过new创建的字符串对象,每一次new都会申请一个内容空间, 虽然内容相同, 但是地址值不同
char[] chs = {'a', 'b', 'c'}; // 字符用单引号, 字符串用双引号
String s1 = new String(chs);
String s2 = new String(chs);
每一次new都会有一个新的地址, 只不过s1和s2参考的字符串内容是相同的.
- ""方式给出的字符串, 只要字符串序列相同(顺序和大小), 无论在程序代码中出现几次, jvm都只会建立一个string对象
String s3 = "abc";
String s4 = "abc";
第一行, JVM会创建一个String对象放在字符串池中, 第二行, s4直接参考字符串池中的String对象, 本质上是同一个对象.
String的比较
使用 == 作比较
- 基本类型: 比较的是数据值是否相同
- 引用类型: 比较的是地址值是否相同
字符串是对象, 他比较内容是否相同, 是通过一个方法来实现的, 这个方法叫: equals()
- public boolean equal(Object anObject): 将此字符串与指定对象进行比较, 由于我们比较的是字符串对象, 所以参数直接传递一个字符串.
package string;
public class StringEquals {
public static void main(String[] args) {
// 构造方式获得字符串
char[] chs = {'a', 'b', 'c'};
String s1 = new String(chs);
String s2 = new String(chs);
// 直接赋值获得字符串
String s3 = "abc";
String s4 = "abc";
// 比较字符串对象地址是否相同
System.out.println(s1 == s2);
System.out.println(s1 == s3);
System.out.println(s3 == s4);
System.out.println("----------");
System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
System.out.println(s3.equals(s4));
}
}
/*
false
false
true
----------
true
true
true
*/
案例
遍历字符串
输入一段字符串,使用程序在控制台遍历该字符串
思路:
-
录入一段字符串, 使用Scanner
-
遍历字符串, 首先要能获取到字符串中的每一个字符
- public char charAt(int index): 返回指定索引出的char值
-
遍历字符串, 其次要能够获取到字符串的长度
- public int length(): 返回字符串的长度
-
遍历字符串格式
for (int i=0; i<s.length; i++) {
s.charAt(i); // 就是指定索引处的字符值
}
示例
package string;
import java.util.Scanner;
public class StringTravel {
public static void main(String[] args) {
// 录入一个字符串
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String line = sc.nextLine();
// 遍历字符串
for(int i=0; i< line.length(); i++) {
System.out.println(line.charAt(i));
}
}
}
统计字符类型
package string;
import java.util.Scanner;
public class StringCount {
public static void main(String[] args) {
// 输入一个段字符串
Scanner sc = new Scanner(System.in);
System.out.println("请输入一段字符:");
String line = sc.nextLine();
// 初始化三个统计值
int capitalCount = 0;
int lowerCount = 0;
int numberCount = 0;
// 遍历字符串,
for(int i=0; i<line.length(); i++) {
char ch = line.charAt(i);
// 判断该字符属于哪一种类型,然后对应类型数值+1;
if (ch > 'A' && ch<='Z') {
capitalCount++;
} else if(ch >= 'a' && ch <='z') {
lowerCount++;
} else if(ch >='0' && ch <= '9') {
numberCount++;
}
}
// 输出三种类型的统计值
System.out.println("大写字母: " + capitalCount + "个");
System.out.println("小写字母: " + lowerCount + "个");
System.out.println("数字: " + numberCount + "个");
}
}
StringBuilder
Stringbuilder概述
StringBuilder是一个可变的字符串类, 可以看做一个容器.可变是指StringBuilder对象中的内容是可变的.
和String的区别:
- String内容是不可变的
- StringBuilder内容是可变的
StringBuilder构造方法
方法名 | 说明 |
---|---|
public StringBuilder() | 创建一个空白的可变字符串, 不含任何内容 |
Public StringBuilder(String str) | 根据字符串的内容, 来创建可变字符串对象 |
示例
package string;
/*
StringBuilder构造方法:
1.public StringBuilder(): 创建一个空白的可变字符串, 不含任何内容
2.Public StringBuilder(String str): 根据字符串的内容, 来创建可变字符串对象
*/
public class StringBuilderDemo {
public static void main(String[] args) {
// public StringBuilder(): 创建一个空白的可变字符串, 不含任何内容
StringBuilder sb = new StringBuilder();
System.out.println("sb:" + sb);
System.out.println("sb长度:" + sb.length());
// Public StringBuilder(String str): 根据字符串的内容, 来创建可变字符串对象
StringBuilder sb2 = new StringBuilder("abc");
System.out.println("sb2:" + sb2);
System.out.println("sb长度:" + sb2.length());
}
}
StringBuilder添加和反转方法
方法名 | 说明 |
---|---|
Public StringBuilder append(任意类型) | 添加数据, 并返回对象本身 |
public StringBuilder reverse() | 返回相反的字符序列 |
示例
package string;
public class StringBuilderAppend {
public static void main(String[] args) {
// 创建对象
StringBuilder sb = new StringBuilder();
// Public StringBuilder append(任意类型): 添加数据, 并返回对象本身
// StringBuilder sb2 = sb.append("hello");
// System.out.println("sb: " + sb);
// System.out.println("sb2: " + sb2);
sb.append("hello");
sb.append("world");
sb.append("java");
System.out.println("sb: " + sb);
// 链式编程
sb.append("hello").append("world").append("java").append(100);
System.out.println("sb: " + sb);
//public StringBuilder reverse(): 返回相反的字符序列
sb.reverse();
System.out.println("sb: " + sb);
}
}
String和StringBuilder相互转换
StringBuilder转String:
- public String toString(): 通过toString()方法将StringBuilder转换为String
String转StringBuilder:
- Public StringBuilder(String s): 通过构造方法可以实现String转换为StringBuilder
package string;
public class StringBuilderInterTransform {
public static void main(String[] args) {
// StringBuilder转String
StringBuilder sb = new StringBuilder();
sb.append("abc");
// String s = sb // 错误的转换
// 通过toString()方法将StringBuilder转换为String
String s = sb.toString();
System.out.println("s: " + s);
// String转StringBuilder
String s1 = "hello";
// 通过构造方法可以实现String转换为StringBuilder
StringBuilder sb1 = new StringBuilder(s1);
System.out.println("sb1: " + sb1);
}
}
衣带渐宽终不悔,为伊消得人憔悴!