一、认识字符串
字符(char
)类型是Java得基本数据类型之一,用来存储单个字符。在开发过程中,往往多个字符在一起才能表达一个有意义的数据。Java提供了字符串类型,用来处理一连串得字符。字符串便是有若干字符组成得序列。
1、字符串的声明和初始化
Java中,声明和初始化一个字符串的语法格式如下:
String 变量名 = "初始值";
//或
String 变量名 = new String("初始值");
实例:
public class Test {
public static void main(String[] args){
String str1 = "Hello Word";
String str2 = new String("Hello Word");
}
}
说明:
- 一旦创建了
string
对象,那么它的值就无法改变了。 - 事实上,
String
类型用一个char
类型的数组来存储,处理字符串的。
2、字符串的连接
多个字符串连接在一起,也可以将字符串与基本类型变量连接。最常用的连接字符串的方法是使用+
操作符。
实例:
public class Test{
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "Word";
String str3 = str1 + str2;
String str4 = "Hello" + "Word";
int num1 = 123;
String str5 = num1 + str1;
String str6 = str1 + num1;
System.out.println("str1 = " + str1);
System.out.println("str2 = " + str2);
System.out.println("str3 = " + str3);
System.out.println("str4 = " + str4);
System.out.println("str5 = " + str5);
System.out.println("str6 = " + str6);
}
}
说明:
- 字符串与基本数据类型的变量使用
+
操作符进行连接时,会先将基本数据类型转换为字符串类型,然后进行连接操作。
3、字符串的比较
在程序中,比较两个数据是否相等是一种很常见的操作,基本数据类型的变量之间使用==
操作符便可以判断 变量中保存的数据是否相等。而字符串之间的比较有所不同。
实例:
public class Test {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "Hello";
String str3 = new String("Hello");
System.out.println("(str1 == str2) = " + (str1 == str2));
System.out.println("(str1 == str3) = " + (str1 == str3));
System.out.println("str1.equals(str3) = " + str1.equals(str3));
}
}
说明:
- 用
==
操作符比较str1
和str2
,结果为true
,事实上==
操作符比较的是变量中存储的内容(数据或内存地址编号)。字符串是引用类型,str1 == str2
的结果为ture
,意味着str1
和str2
两个变量中存储着同样的内存地址编号,即引用了同一块内存。 String
类型提供了equals(Object anObject)
方法,可以比较字符串的字面值是否相同,str1.equals(str3)
的返回结果为ture
。因此,如果要比较字符串的字面值是否相同,需要使用equals(Object anObject)
方法。
4、内存中的字符串
实例:
public class Test {
public static void main(String[] args) {
// 基本数据类型
int num1 = 1;
int num2 = 1;
System.out.println("(num1 == num2) = " + (num1 == num2));
// 数组,引用数据类型
char[] char1 = {'H'};
char[] char2 = {'H'};
System.out.println("(char1 == char2) = " + (char1 == char2));
// String,引用数据类型
String str1 = "Hello";
String str2 = "Hello";
System.out.println("(str1 == str2) = " + (str1 == str2));
}
}
num1
和num2
两个基本数据类型的变量进行==
运算,这两个变量中存储的都是基本数据类型的值,即1
,因此返回结果是true
;char1
和char2
两个数组进行==
运算,因为它们是引用类型,分别在堆内存中申请了内存空间,所以char1
和char2
两个变量中存储的是不同的内存地址编号,故而返回结果为false
。同为引用类型的String
型的变量,str1
和str2
使用==
操作符比较时,返回的结果是true
,即str1
和str2
引用的内存地址相同,这是什么原因呢?
事实上,这是Java有意为之,由于字符串这一类型的数据是程序中出现频率最高的数据类型,并且字符串内容重复的改率特别高,如果全部分开申请内存的话,将会非常的耗费内存,Java为了节省内存考虑,设计了字符串池这一内存区域。(字符串池在JDK 7
以前设计在方法区中,而在JDK 8
以后设计在堆内存中)。
说明:
执行代码String str1 = "Hello"
时,首先在栈中main
方法对应栈帧的局部变量表中,为变量 str1
分配内存,查找字符串池中是否有一块内存中已经存储了Hello
这一字符串字面量,没有的话,字符串池中分配内存并存储字符串字面量"Hello"
,赋值操作会将字符串池中已经分配好的内存空间的首地址存储到变量str1
在局部变量表的对应位置。
执行代码String str2 = "Hello"
时,栈中main
方法对应栈帧的局部变量表中,为变量str2
分配内存,查找字符串池中是否有一块内存中已经存储了Hello
这一字符串字面量,有的话,引用该内存地址。
执行代码System.out.println("(str1 == str2) = " + (str1 == str2))
,由于变量str1
和str2
引用的内存地址相同,故返回结果为true
。
二、字符串常用API
1、什么是API
API(Application Programming Interface
),即应用程序编程接口,对这一概念的定义大多数都晦涩难懂。这里通俗的理解这一概念:
- A(
Application
),即应用,按不同的场合,可以是一个提供特定功能的软件、一个提供某些数据的网络服务、一个作为程序组件的类库、甚至是一个硬件设备,等等。 - P(
Programming
),即编程。 - I(
Interface
),即接口,是不同系统或实体交接并通过它彼此作用的媒介(或者理解为方式、渠道、手段)。
所以,API就是在编程过程中,实体或系统之间进行信息交换的媒介。
更直白的理解,当某一应用需要与其他应用进行信息交换时,需要通过某一媒介,告知对方应用一些信息,同时获取本应用所需要的信息,同时,该媒介应当隐藏这些应用的其他细节,这一媒介便是API,与这一媒介具有同样性质的事物,都可以称之为API。
开发人员在使用API时,无需关心API后面隐藏的实现细节,仅需要关心API的名称、输入什么数据、获得什么数据这三点就足够了。
2、字符串常用API
Java字符串常用的API:
方法 | 返回值类型 | 方法说明 |
---|---|---|
equals(Object anObject) | boolean | 将此字符串与指定的对象比较 |
equalsIgnoreCase(String anotherString) | boolean | 忽略大小写比较两个字符串的字面值是否相等 |
length() | int | 获取字符串的长度 |
charAt(int index) | char | 获取指定索引处的 char 值 |
indexOf(String str) | int | 获取指定子字符串在原字符串中第一次出现处的索引 |
lastIndexOf(String str) | int | 获取指定子字符串在原字符串中最右边出现处的索引 |
startsWith(String prefix) | boolean | 测试原字符串是否以指定的前缀开始 |
endsWith(String suffix) | boolean | 测试原字符串是否以指定的后缀结束 |
toLowerCase() | String | 获取原字符串对应的小写字符串 |
toUpperCase() | String | 获取原字符串对应的大写字符串 |
substring(int beginIndex) | String | 截取原字符串,从传入参数beginIndex 为下标的位置开始截取到末尾 |
substring(int beginIndex, int endIndex) | String | 截取原字符串,从参数beginIndex 为下标的位置开始截取到参数endIndex为下标的位置 |
trim() | String | 去掉原字符串首尾的空格 |
split(String regex) | String [] | 将原字符串按照传入参数regex 分割为字符串数组 |
replace(String regex, String replacement) | String | 将原字符串中指定的内容替换成另外的内容 |
三、字符串与基本数据类型的转换
1、基本数据类型转换为String类型
基本数据类型转换为字符串通常有两种方法:
- 通过字符串连接将基本类型转换为
String
类型。 - 通过
String
类型提供的valueof(基本类型数据 变量名)
方法将基本类型转换成字符串类型。
实例:
public class Test {
public static void main(String[] args) {
// 通过连接字符串将基本类型转换为String类型
int num1 = 10;
double num2 = 3.14;
boolean boolean1 = true;
String sNum1 = "" + num1;
String sNum2 = "" + num2;
String sBoolean1 = "" + boolean1;
// 通过valueOf(基本类型数据 变量名)方法将基本类型转换为String类型
int num3 = 10;
double num4 = 3.14;
boolean boolean2 = true;
String sNum3 = String.valueOf(num3);
String sNum4 = String.valueOf(num4);
String sBoolean2 = String.valueOf(boolean2);
}
}
说明:
- 使用
+
运算符将基本类型与字符串类型连接时,Java首先自动将基本类型转换成字符串类型,然后连接在一起.。 - 使用
String
类的valueOf(基本类型数据 变量名
)方法可以将基本类型转换成字符串类型,该方法无需String
类型的变量,直接使用类名String
即可调用。
2、String类型转换为基本数据类型
将字符串类型转换为基本类型,需要使用基本类型的包装类。Java为每一种基本类型都提供了对应的包装类,包装类提供了一些常用的操作,其中就包括将字符串类型转换成基本类型。基本类型的包装类及其转换方法如下表:
基本类型 | 包装类 | 方法 | 方法说明 |
---|---|---|---|
byte | Byte | parseByte(String s) | 将字符串转换为byte 类型 |
short | Short | parseShort(String s) | 将字符串转换为short 类型 |
int | Integer | parseInt(String s) | 将字符串转换为int 类型 |
long | Long | parseLong(String s) | 将字符串转换为long 类型 |
float | Float | parseFloat(String s) | 将字符串转换为float 类型 |
double | Double | parseDouble(String s) | 将字符串转换为double 类型 |
boolean | Boolean | parseBoolean(String s) | 将字符串转换为boolean 类型 |
实例:
public class Test {
public static void main(String[] args) {
// 通过连接字符串将基本类型转换为String类型
int num1 = 10;
double num2 = 3.14;
boolean boolean1 = true;
String sNum1 = "" + num1;
String sNum2 = "" + num2;
String sBoolean1 = "" + boolean1;
// 通过valueOf(基本类型数据 变量名)方法将基本类型转换为String类型
int num3 = 10;
double num4 = 3.14;
boolean boolean2 = true;
String sNum3 = String.valueOf(num3);
String sNum4 = String.valueOf(num4);
String sBoolean2 = String.valueOf(boolean2);
}
}
说明:
- 本例中的转换方法均无需对应类型的变量,直接使用类名即可调用。
- 字符串与
char
类型的转换可以通过字符串的charAt(int index)
方法完成。如下例:
public class Test {
public static void main(String[] args) {
// 通过连接字符串将基本类型转换为String类型
int num1 = 10;
double num2 = 3.14;
boolean boolean1 = true;
String sNum1 = "" + num1;
String sNum2 = "" + num2;
String sBoolean1 = "" + boolean1;
// 通过valueOf(基本类型数据 变量名)方法将基本类型转换为String类型
int num3 = 10;
double num4 = 3.14;
boolean boolean2 = true;
String sNum3 = String.valueOf(num3);
String sNum4 = String.valueOf(num4);
String sBoolean2 = String.valueOf(boolean2);
}
}