操纵字符串 中的字符
String
类具有许多方法来检查字符串 的内容,查找字符串 中的字符或子字符串,更改大小写以及其他任务。
按索引获取字符和子字符串
您可以通过调用charAt()
访问器方法来获得字符串 中特定索引处的字符。第一个字符的索引为 0,而最后一个字符的索引为length()-1
。例如,以下代码获取字符串 中索引 9 处的字符:
String anotherPalindrome = "Niagara. O roar again!";
char aChar = anotherPalindrome.charAt(9);
索引从 0 开始,因此索引 9 处的字符为“ O”,如下图所示:
如果要从字符串 中获取多个连续字符,则可以使用substring
方法。 substring
方法具有两个版本,如下表所示:
String
类中的substring
方法*
Method | Description |
---|---|
String substring(int beginIndex, int endIndex) | 返回一个新字符串,该字符串 是该字符串 的子字符串。子字符串 从指定的beginIndex 开始,并扩展到索引endIndex - 1 处的字符。 |
String substring(int beginIndex) | 返回一个新字符串,该字符串 是该字符串 的子字符串。整数参数指定第一个字符的索引。在这里,返回的子字符串 延伸到原始字符串 的末尾。 |
以下代码从 Niagara 回文中获取从索引 11 一直延伸到索引 15(但不包括索引 15)的子字符串,即单词“咆哮”:
String anotherPalindrome = "Niagara. O roar again!";
String roar = anotherPalindrome.substring(11, 15);
其他处理字符串 的方法
以下是其他几种用于处理字符串 的String
方法:
String
类中用于处理字符串 的其他方法*
Method | Description |
---|---|
String[] split(String regex) | |
String[] split(String regex, int limit) | 搜索由字符串 参数(包含正则表达式)指定的匹配项,并将该字符串 相应地拆分为字符串 数组。可选的 integer 参数指定返回数组的最大大小。正则表达式包含在标题为“正则表达式”的类中。 |
CharSequence subSequence(int beginIndex, int endIndex) | 返回从beginIndex 索引直到endIndex -1 构成的新字符序列。 |
String trim() | 返回此字符串 的副本,其中删除了前导空格和尾随空格。 |
String toLowerCase() String toUpperCase() | 返回此字符串 的副本,转换为小写或大写。如果不需要转换,则这些方法将返回原始字符串。 |
搜索字符串 中的字符和子字符串
这是其他一些String
方法,用于查找字符串 中的字符或子字符串。 String
类提供了访问器方法,这些方法返回特定字符或子字符串indexOf()
和lastIndexOf()
的字符串 中的位置。 indexOf()
方法从字符串 的开头开始向前搜索,而lastIndexOf()
方法从字符串 的末尾开始向前搜索。如果找不到字符或子字符串,则indexOf()
和lastIndexOf()
返回-1.
String
类还提供了搜索方法contains
,如果字符串 包含特定的字符序列,则返回 true。当您只需要知道字符串 包含一个字符序列,但是精确的位置并不重要时,请使用此方法。
下表描述了各种字符串 搜索方法。
String
类别中的搜索方法*
Method | Description |
---|---|
int indexOf(int ch) int lastIndexOf(int ch) | 返回指定字符的第一个(最后)出现的索引。 |
int indexOf(int ch, int fromIndex) int lastIndexOf(int ch, int fromIndex) | 返回指定字符的第一个(最后)出现的索引,从指定的索引向前(向后)搜索。 |
int indexOf(String str) int lastIndexOf(String str) | 返回指定子字符串 的第一个(最后)出现的索引。 |
int indexOf(String str, int fromIndex) int lastIndexOf(String str, int fromIndex) | 返回指定子字符串 的第一个(最后)出现的索引,从指定的索引向前(向后)搜索。 |
boolean contains(CharSequence s) | 如果字符串 包含指定的字符序列,则返回 true。 |
Note:
CharSequence
是由String
类实现的interface。因此,可以将字符串 用作contains()
方法的参数。
将字符和子字符串 替换为字符串
String
类几乎没有用于将字符或子字符串 插入字符串 的方法。通常,不需要它们:您可以通过 String 联从字符串 中删除的子字符串 和要插入的子字符串 来创建新字符串。
String
类确实有四种方法来替换找到的字符或子字符串。他们是:
String
类中用于处理字符串 的方法*
Method | Description |
---|---|
String replace(char oldChar, char newChar) | 返回一个新字符串,该字符串 是用 newChar 替换此字符串 中所有出现的 oldChar 的结果。 |
String replace(CharSequence target, CharSequence replacement) | 用指定的 Literals 替换序列替换该字符串 中与 Literals 目标序列匹配的每个子字符串。 |
String replaceAll(String regex, String replacement) | 用给定的替换项替换该字符串 中与给定的正则表达式匹配的每个子字符串。 |
String replaceFirst(String regex, String replacement) | 用给定的替换项替换与给定的正则表达式匹配的此字符串 的第一个子字符串。 |
An Example
下面的类Filename演示了使用lastIndexOf()
和substring()
隔离文件名的不同部分。
Note:
以下Filename
类中的方法不进行任何错误检查,并假定其参数包含完整的目录路径和带 extensions 的文件名。如果这些方法是生产代码,则它们将验证其参数是否正确构造。
public class Filename {
private String fullPath;
private char pathSeparator,
extensionSeparator;
public Filename(String str, char sep, char ext) {
fullPath = str;
pathSeparator = sep;
extensionSeparator = ext;
}
public String extension() {
int dot = fullPath.lastIndexOf(extensionSeparator);
return fullPath.substring(dot + 1);
}
// gets filename without extension
public String filename() {
int dot = fullPath.lastIndexOf(extensionSeparator);
int sep = fullPath.lastIndexOf(pathSeparator);
return fullPath.substring(sep + 1, dot);
}
public String path() {
int sep = fullPath.lastIndexOf(pathSeparator);
return fullPath.substring(0, sep);
}
}
这是一个程序FilenameDemo,它构造一个Filename
对象并调用其所有方法:
public class FilenameDemo {
public static void main(String[] args) {
final String FPATH = "/home/user/index.html";
Filename myHomePage = new Filename(FPATH, '/', '.');
System.out.println("Extension = " + myHomePage.extension());
System.out.println("Filename = " + myHomePage.filename());
System.out.println("Path = " + myHomePage.path());
}
}
这是程序的输出:
Extension = html
Filename = index
Path = /home/user
如下图所示,我们的extension
方法使用lastIndexOf
在文件名中查找句点(.)的最后一次出现。然后substring
使用lastIndexOf
的返回值提取文件 extensions-即从句点到字符串 结尾的子字符串。此代码假定文件名中包含句点;如果文件名没有句点,则lastIndexOf
返回-1,并且 substring 方法抛出StringIndexOutOfBoundsException
。
另外,请注意extension
方法使用dot + 1
作为substring
的参数。如果句点字符(.)是字符串 的最后一个字符,则dot + 1
等于字符串 的 Long 度,它比字符串 的最大索引大一个(因为索引从 0 开始)。这是substring
的合法参数,因为该方法接受等于但不大于字符串Long 度的索引,并将其解释为“字符串 的末尾”。