Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
在 Java 编程中广泛使用的字符串是一系列字符。在 Java 编程语言中,字符串是对象。
Java 平台提供 String
类来创建和操作字符串。
创建字符串的最直接方法是编写:
String greeting = "Hello world!";
在这种情况下,"Hello world!" 是一个 string literal (字符串字面量) 代码中的一系列字符,用双引号括起来。每当它在代码中遇到字符串字面量时,编译器就会创建一个 String
对象包含其值,在这种情况下其值为 Hello world!
。
与任何其他对象一样,你可以使用 new
关键字和构造函数创建 String
对象。String
类有 13 个构造函数,允许你使用不同的源提供字符串的初始值,例如字符数组:
char[] helloArray = { 'h', 'e', 'l', 'l', 'o', '.' }; String helloString = new String(helloArray); System.out.println(helloString);
此代码段的最后一行显示 hello
。
String
类是不可变的,因此一旦创建,就无法更改 String
对象。String
类有许多方法,其中一些将在下面讨论,似乎可以修改字符串。由于字符串是不可变的,因此这些方法真正做的是创建并返回包含操作结果的新字符串。
用于获取对象信息的方法称为 accessor methods (访问器方法)。可以与字符串一起使用的一种访问器方法是 length()
方法,该方法返回字符串对象中包含的字符数。执行以下两行代码后,len
等于 17:
String palindrome = "Dot saw I was Tod"; int len = palindrome.length();
palindrome (回文) 是一个对称的单词或句子 - 它向前和向后的拼写相同(忽略大小写和标点符号)。这是一个简短而低效的程序来反转回文串。它调用 String
方法 charAt(i)
,它返回字符串中的第 i 个字符,从 0 开始计数。
public class StringDemo { public static void main(String[] args) { String palindrome = "Dot saw I was Tod"; int len = palindrome.length(); char[] tempCharArray = new char[len]; char[] charArray = new char[len]; // put original string in an // array of chars for (int i = 0; i < len; i++) { tempCharArray[i] = palindrome.charAt(i); } // reverse array of chars for (int j = 0; j < len; j++) { charArray[j] = tempCharArray[len - 1 - j]; } String reversePalindrome = new String(charArray); System.out.println(reversePalindrome); } }
运行该程序会产生以下输出:
doT saw I was toD
要完成字符串反转,程序必须将字符串转换为字符数组(第一个 for
循环),将数组反转为第二个数组(第二个 for
循环) ,然后转换回字符串。String
类包含一个方法 getChars()
,用于将字符串或字符串的一部分转换为字符数组,以便我们可以替换上面程序中的第一个 for
循环
palindrome.getChars(0, len, tempCharArray, 0);
String
类包含用于连接两个字符串的方法:
string1.concat(string2);
这将返回一个新的字符串,该字符串为 string1,并在结尾处添加了 string2。
你还可以将 concat()
方法与字符串文字一起使用,如下所示:
"My name is ".concat("Rumplestiltskin");
字符串通常用 +
运算符连接,如
"Hello," + " world" + "!"
结果是
"Hello, world!"
+
运算符广泛用于 print
语句中。例如:
String string1 = "saw I was "; System.out.println("Dot " + string1 + "Tod");
这会打印
Dot saw I was Tod
这种连接可以是任何对象的混合。对于不是 String
的每个对象,会调用其 toString()
方法将其转换为 String
。
+
连接运算符。例如:
String quote = "Now is the time for all good " + "men to come to the aid of their country.";
使用 +
连接运算符在行之间断开字符串在 print
语句中再次非常常见。
你已经看到使用 printf()
和 format()
方法来打印带格式化数字的输出。String
类具有等效的类方法 format()
,它返回 String
对象而不是 PrintStream
对象。
使用 String
的静态 format()
方法可以创建可以重复使用的格式化字符串,而不是一次性打印语句。例如,不使用
System.out.printf("The value of the float " + "variable is %f, while " + "the value of the " + "integer variable is %d, " + "and the string is %s", floatVar, intVar, stringVar);
你可以写
String fs; fs = String.format("The value of the float " + "variable is %f, while " + "the value of the " + "integer variable is %d, " + " and the string is %s", floatVar, intVar, stringVar); System.out.println(fs);