Strings

在 Java 编程中广泛使用的字符串 是字符序列。在 Java 编程语言中,字符串 是对象。

Java 平台提供了String类来创建和操作字符串。

Creating Strings

创建字符串 的最直接方法是编写:

String greeting = "Hello world!";

在这种情况下,“ Hello world!”是一个字符串Literals,即代码中一系列用 Double 引号引起来的字符。每当在代码中遇到字符串Literals 时,编译器都会使用其值(在本例中为Hello world!)创建一个String对象。

与其他任何对象一样,您可以使用new关键字和构造函数来创建String对象。 String类具有十三个构造函数,可让您使用不同的来源(例如字符数组)提供字符串 的初始值:

char[] helloArray = { 'h', 'e', 'l', 'l', 'o', '.' };
String helloString = new String(helloArray);
System.out.println(helloString);

此代码段的最后一行显示hello

Note:

String类是不可变的,因此一旦创建,就不能更改String对象。 String类具有许多方法,下面将讨论其中的一些方法,这些方法似乎可以修改字符串。由于字符串 是不可变的,因此这些方法的 true 作用是创建并返回一个包含操作结果的新字符串。

String Length

用于获取有关对象信息的方法称为访问器方法。可以与字符串 一起使用的一种访问器方法是length()方法,该方法返回字符串 对象中包含的字符数。执行以下两行代码后,len等于 17:

String palindrome = "Dot saw I was Tod";
int len = palindrome.length();

回文是指对称的单词或句子-前后拼写相同,而忽略大小写和标点符号。这是一个简短而低效的程序,可以逆转回 Literals 符 String。它调用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);

Concatenating Strings

String类包含用于连接两个字符串 的方法:

string1.concat(string2);

这将返回一个新的字符串,该字符串 为 string1,最后添加了 string2.

您还可以将concat()方法与字符串Literals 一起使用,如下所示:

"My name is ".concat("Rumplestiltskin");

字符串 通常与+运算符连接在一起,例如

"Hello," + " world" + "!"

导致

"Hello, world!"

+运算符广泛用于print语句。例如:

String string1 = "saw I was ";
System.out.println("Dot " + string1 + "Tod");

which prints

Dot saw I was Tod

这样的 String 联可以是任何对象的混合。对于不是String的每个对象,将调用其toString()方法将其转换为String

Note:

Java 编程语言不允许 Literals 字符串 跨越源文件中的行,因此您必须在多行字符串 的每一行末尾使用+String 联运算符。例如:

String quote = 
"Now is the time for all good " +
"men to come to the aid of their country.";

再次使用+String 联运算符在行之间打断字符串 在print语句中非常常见。

创建格式字符串

您已经看到使用printf()format()方法来打印带格式数字的输出。 String类具有等效的类方法format(),该方法返回String对象而不是PrintStream对象。

与一次性打印语句相反,使用String's static 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);