共计 3789 个字符,预计需要花费 10 分钟才能阅读完成。
操纵字符串中的字符
String 类有许多方法可用于检查字符串的内容,查找字符串中的字符或子字符串,更改大小写以及其他任务。
按索引获取字符和子字符串
你可以通过调用 charAt() 访问器方法获取字符串中特定索引处的字符,第一个字符的索引是 0,而最后一个字符的索引是 length()-1,例如,以下代码获取字符串中索引 9 处的字符:
String anotherPalindrome = “Niagara. O roar again!”;
char aChar = anotherPalindrome.charAt(9);
索引从 0 开始,因此索引 9 处的字符为 ’O’,如下图所示:
如果要从字符串中获取多个连续字符,可以使用 substring 方法,substring 方法有两个版本,如下表所示:
方法
描述
String substring(int beginIndex, int endIndex)
返回一个新字符串,该字符串是此字符串的子字符串;子字符串从指定的 beginIndex 开始,并扩展到索引 endIndex – 1 处的字符。
String substring(int beginIndex)
返回一个新字符串,该字符串是此字符串的子字符串;integer 参数指定第一个字符的索引;这里,返回的子字符串延伸到原始字符串的末尾。
以下代码从 Niagara palindrome 获取从索引 11 延伸到但不包括索引 15 的子字符串,这是“roar”一词:
String anotherPalindrome = “Niagara. O roar again!”;
String roar = anotherPalindrome.substring(11, 15);
操纵字符串的其他方法
以下是其他几种用于操作字符串的 String 方法:
方法
描述
String[] split(String regex)String[] split(String regex, int limit)
搜索字符串参数(包含正则表达式)指定的匹配项,并相应地将此字符串拆分为字符串数组;可选的整数参数指定返回数组的最大大小,正则表达式在标题为“正则表达式”的课程中介绍。
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,当你只需知道字符串包含字符序列但使用精确位置并不重要时,请使用此方法。
下表描述了各种字符串搜索方法。
方法
描述
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。
CharSequence 是一个由 String 类实现的接口,因此,你可以使用字符串作为 contains() 方法的参数。
将字符和子字符串替换到字符串中
String 类只有很少的方法可以将字符或子字符串插入到字符串中,通常,不需要它们:你可以通过连接从字符串中删除的子字符串以及要插入的子字符串来创建新字符串。
但是,String 类确实有四种方法可以替换找到的字符或子字符串,它们是:
方法
描述
String replace(char oldChar, char newChar)
返回一个新字符串,该字符串是使用 newChar 替换此字符串中出现的所有 oldChar。
String replace(CharSequence target, CharSequence replacement)
将此字符串中与文字 target 序列匹配的每个子字符串替换为指定的文字 replacement 序列。
String replaceAll(String regex, String replacement)
将与给定正则表达式匹配的字符串的每个子字符串替换为给定的 replacement。
String replaceFirst(String regex, String replacement)
将匹配给定正则表达式的字符串的第一个子字符串替换为给定的 replacement。
一个例子
下面的类 Filename 演示了如何使用 lastIndexOf() 和 substring() 来隔离文件名的不同部分。
以下 Filename 类中的方法不执行任何错误检查,并假设其参数包含完整的目录路径和带扩展名的文件名,如果这些方法是生产代码,他们将验证他们的参数是否正确构造。
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 的返回值来提取文件扩展名 — 也就是说,从字符串的点到结尾的子字符串。此代码假定文件名中包含点,如果文件名没有点,则 lastIndexOf 返回 -1,并且 substring 方法抛出 StringIndexOutOfBoundsException。
另请注意,扩展方法使用 dot + 1 作为 substring 的参数,如果点字符(.)是字符串的最后一个字符,则 dot + 1 等于字符串的长度,则大于字符串中的最大索引(因为索引从 0 开始),这是 substring 的合法参数,因为该方法接受的索引等于但不大于字符串的长度,并将其解释为“字符串的结尾”。
上一篇:在数字和字符串之间转换
下一篇:比较字符串和字符串的部分