Java String字符串类的用法(附带实例,新手必看)
Java 编程时使用频率最高的应该就是字符串了。所谓字符串就是若干字符的组合,字符串可以是字母、中文、数字、符号等的任意组合,比如“java”、“我们是程序员”、“10086”都是字符串。
Java 提供的字符串类为 String,通过该类能很方便地对字符串进行各种操作。该类对应的包类为 java.lang.String,我们编写代码时无须手动导入这个类,因为 Java 会默认导入该类。
如果在编程时要定义一个字符串,我们通常会采用最简单的方式——双引号,将字符串放在双引号(英文符号)内即可,比如“Hello World”。
通过双引号可以非常方便地创建字符串对象,例如:
除了使用双引号定义字符串,还可以使用 String 类的构造方法来定义字符串。例如:
实际上双引号方式是 Java 为了方便开发而设定的,其通过编译后与 String 类的构造方法的效果是相同的,也就是说可以随意用其中一种。例如:
下表列出的是 String 类的常用方法:
假设字符串长度为 n,那么第一个字符索引为 0,而最后一个字符的索引为 n-1。例如:
如果传入的索引超出了字符串索引范围会怎样呢?我们可以试试传入 11,结果报了“StringIndexOutOfBoundsException”的异常信息,说明这个索引超出了范围。
获取字符串的长度后可以执行很多其他操作,比如可以遍历字符串。例如:
如果传入两个值则分别表示起始索引和结束索引,注意结束索引对应的字符不会被截取。
例如:
Java 提供的字符串类为 String,通过该类能很方便地对字符串进行各种操作。该类对应的包类为 java.lang.String,我们编写代码时无须手动导入这个类,因为 Java 会默认导入该类。
如果在编程时要定义一个字符串,我们通常会采用最简单的方式——双引号,将字符串放在双引号(英文符号)内即可,比如“Hello World”。
通过双引号可以非常方便地创建字符串对象,例如:
public class StringTest { public static void main(String[] args) { String s1 = "Hello World"; String s2; s2 = "我们是程序员"; System.out.println(s1); System.out.println(s2); s2 = "10086"; System.out.println(s2); } }输出结果为:
Hello World
我们是程序员
10086
除了使用双引号定义字符串,还可以使用 String 类的构造方法来定义字符串。例如:
public class StringTest { public static void main(String[] args) { String s1 = new String("Hello World"); String s2; s2 = new String("我们是程序员"); System.out.println(s1); System.out.println(s2); char[] chars = { '1', '0', '0', '8', '6' }; String s3 = new String(chars); System.out.println(s3); } }输出结果为:
Hello World
我们是程序员
10086
实际上双引号方式是 Java 为了方便开发而设定的,其通过编译后与 String 类的构造方法的效果是相同的,也就是说可以随意用其中一种。例如:
String s1 = "Hello World"; String s1 = new String("Hello World");两行代码是等价的,但是为了方便,多数情况下我们会使用双引号的方式。
Java String类常用方法
Java 提供 String 类是为了方便我们对字符串进行处理,它将常用的字符串操作进行了封装,以方法的形式提供给我们使用,这些方法包括计算字符串长度、获取字符串指定位置的字符、将字符串进行大小写转换等。下表列出的是 String 类的常用方法:
方法 | 作用 |
---|---|
char charAt(int index) | 获取字符串对象中指定位置的字符 |
int length() | 获取字符串对象的长度 |
boolean equals(Object anObject) | 比较两个字符串对象是否相等 |
boolean startsWith(String prefix) | 判断字符串对象是否以某个字符串开始 |
boolean endsWith(String suffix) | 判断字符串对象是否以某个字符串结尾 |
int indexOf(String str) | 查找某个字符在字符串中第一次出现的位置 |
String substring(int beginIndex) | 截取字符串对象中指定位置之后的子字符串 |
String replace(char oldChar, char newChar) | 替换字符串中指定的字符 |
String[] split(String regex) | 将字符串对象切分成多个子字符串 |
String toLowerCase() | 将字符串对象进行小写转换 |
String toUpperCase() | 将字符串对象进行大写转换 |
1) charAt()方法
charAt() 方法用于获取字符串对象中指定位置的字符,需要传入位置索引,索引从 0 开始。假设字符串长度为 n,那么第一个字符索引为 0,而最后一个字符的索引为 n-1。例如:
jshell> String s1 = new String("Hello World"); s1 ==> "Hello World" jshell> s1.charAt(0); $13 ==> 'H' jshell> s1.charAt(10); $14 ==> 'd'对于字符串“Hello World”,charAt(0) 返回的字符为“H”,charAt(10) 返回的字符为“d”。
如果传入的索引超出了字符串索引范围会怎样呢?我们可以试试传入 11,结果报了“StringIndexOutOfBoundsException”的异常信息,说明这个索引超出了范围。
jshell> s1.charAt(11); | 异常错误 java.lang.StringIndexOutOfBoundsException:String index out of range: 11 | at StringLatin1.charAt (StringLatin1.java:47) | at String.charAt (String.java:693) | at (#15:1)
2) length()方法
length() 方法用于获取字符串对象的长度,例如:jshell> String s1 = new String("Hello World"); s1 ==> "Hello World" jshell> String s2 = new String("我们是程序员"); s2 ==> "我们是程序员" jshell> s1.length(); $9 ==> 11 jshell> s2.length(); $10 ==> 6我们在 JShell 中直接测试这个方法的效果,分别定义了“Hello World”和“我们是程序员”这两个字符串,然后通过 length() 方法获取它们的长度分别为 11 和 6。我们可以数一数看看长度是否正确,注意空格也算一个字符。
获取字符串的长度后可以执行很多其他操作,比如可以遍历字符串。例如:
public class StringTest { public static void main(String[] args) { String s1 = new String("Hello World"); for (int i = 0; i < s1.length(); i++) System.out.print(s1.charAt(i)+","); } }输出结果为:
H,e,l,l,o, ,W,o,r,l,d,
程序中通过 for 循环和 length() 方法就能遍历字符串中的每个字符了。3) equals()方法
equals() 方法用于比较两个字符串对象的值是否相等,如果两个字符串对象包含的所有字符都相同则返回 true,只要有任意一个字符不相同就返回 false。public class StringTest { public static void main(String[] args) { String s1 = new String("Hello"); String s2 = new String("Hello"); String s3 = new String("hello"); String s4 = new String("haha"); System.out.println(s1.equals(s2)); System.out.println(s1.equals(s3)); System.out.println(s1.equals(s4)); } }输出结果为:
true
false
false
4) startsWith()方法
startsWith() 方法用于判断字符串对象的值是否以某个字符串为前缀。例如:jshell> String s1 = new String("Hello World"); s1 ==> "Hello World" jshell> s1.startsWith("H"); $32 ==> true jshell> s1.startsWith("Hel"); $33 ==> true程序中对于“Hello World”字符串,由于它以“H”和“Hel”开始,因此两个结果都为 true。
5) endsWith()方法
endsWith() 方法用于判断字符串对象的值是否以某个字符串结尾,该方法与 startsWith() 方法类似,具体的使用如下:jshell> String s1 = new String("Hello World"); s1 ==> "Hello World" jshell> s1.endsWith("d"); $35 ==> true jshell> s1.endsWith("rld"); $36 ==> true
6) indexOf()方法
indexOf() 方法用于查找某个字符串在待搜索字符串中第一次出现的位置。例如:jshell> String s1 = new String("Hello World"); s1 ==> "Hello World" jshell> s1.indexOf("l"); $38 ==> 2 jshell> s1.indexOf("o"); $39 ==> 4 jshell> s1.indexOf("World"); $40 ==> 6对于“Hello World”字符串,第一次出现“l”的位置为 2,第一次出现“o”的位置为 4。注意位置索引是从 0 开始计算的。第一次出现“World”的位置为 6,以首字符“W”的位置索引为准。
7) substring()方法
substring() 方法用于截取字符串对象中指定位置的子字符串。如果只传入一个值则表示起始索引。例如:jshell> String s1 = new String("Hello World"); s1 ==> "Hello World" jshell> s1.substring(2); $46 ==> "llo World"“s1.substring(2)”表示从位置索引 2 开始截取之后的字符串,结果为“llo World”。
如果传入两个值则分别表示起始索引和结束索引,注意结束索引对应的字符不会被截取。
jshell> String s1 = new String("Hello World"); s1 ==> "Hello World" jshell> s1.substring(2,5); $49 ==> "llo"“s1.substring(2,5)”表示从位置索引 2 开始到位置索引 5(不包括 5 对应的字符)之间的字符串,所以最终结果为“llo”。
8) replace()方法
replace() 方法用于替换字符串中指定的字符串,第一个参数表示原来的字符串,第二个参数表示新的字符串。jshell> String s1 = new String("Hello World"); s1 ==> "Hello World" jshell> s1.replace("o","a"); $54 ==> "Hella Warld" jshell> s1.replace("World","Java"); $55 ==> "Hello Java"程序中,对于“Hello World”字符串,“replace("o","a")”表示用 a 来替换 o,替换后结果为“Hella Warld”。“replace("World","Java")”表示用 Java 来替换 World,替换后结果为“Hello Java”。
9) split()方法
split() 方法用于将字符串对象切分成多个子字符串。例如:jshell> String s1 = new String("你们,我们,他们"); s1 ==> "你们,我们,他们" jshell> s1.split(","); $65 ==> String[3] { "你们", "我们", "他们" }程序中,对于“你们,我们,他们”字符串,“split(",")”表示通过逗号对字符串进行切分,最终得到“你们”“我们”和“他们”三个子字符串。
10) toLowerCase()方法
toLowerCase() 方法用于将字符串对象的值进行小写转换,例如:jshell> String s1 = new String("Hello World"); s1 ==> "Hello World" jshell> s1.toLowerCase(); $67 ==> "hello world"程序中,“Hello World”字符串经过 toLowerCase() 方法处理后变为“hello world”。
11) toUpperCase()方法
toUpperCase() 方法用于将字符串对象的值进行大写转换,效果与 toLowerCase() 方法相反。例如:jshell> String s1 = new String("Hello World"); s1 ==> "Hello World" jshell> s1.toUpperCase(); $69 ==> "HELLO WORLD"
12) 通过+连接
对于字符串对象,我们还经常使用“+”符号,它实际上就是对字符串进行连接操作。如果要连接多个字符串就可以使用“+”,非常方便。例如:
jshell> String s1 = "Hello " + "Java " + "..."; s1 ==> "Hello Java ..."