Java™ 教程(操纵字符串中的字符)

操纵字符串中的字符

String类有许多方法可用于检查字符串的内容,查找字符串中的字符或子字符串,更改大小写以及其余任务。html

按索引获取字符和子字符串

你能够经过调用charAt()访问器方法获取字符串中特定索引处的字符,第一个字符的索引是0,而最后一个字符的索引是length()-1,例如,如下代码获取字符串中索引9处的字符:java

String anotherPalindrome = "Niagara. O roar again!"; 
char aChar = anotherPalindrome.charAt(9);

索引从0开始,所以索引9处的字符为'O',以下图所示:git

objects-charAt.gif

若是要从字符串中获取多个连续字符,可使用substring方法,substring方法有两个版本,以下表所示:github

方法 描述
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);

objects-substring.gif

操纵字符串的其余方法

如下是其余几种用于操做字符串的String方法:segmentfault

方法 描述
String[] split(String regex)
String[] split(String regex, int limit)
搜索字符串参数(包含正则表达式)指定的匹配项,并相应地将此字符串拆分为字符串数组;
可选的整数参数指定返回数组的最大大小,正则表达式在标题为“正则表达式”的课程中介绍。
CharSequence subSequence(int beginIndex, int endIndex) 返回一个索引从beginIndexendIndex - 1构造的新字符序列。
String trim() 返回删除了前面和后面的空格的此字符串的副本。
String toLowerCase()
String toUpperCase()
返回转换为小写或大写的此字符串的副本,若是不须要转换,则这些方法返回原始字符串。

在字符串中搜索字符和子字符串

如下是一些用于在字符串中查找字符或子字符串的其余String方法,String类提供访问器方法,返回特定字符或子字符串在字符串中的位置:indexOf()lastIndexOf()indexOf()方法从字符串的开头向后搜索,而lastIndexOf()方法从字符串的末尾向前搜索,若是未找到字符或子字符串,indexOf()lastIndexOf()将返回-1数组

String类还提供了一个搜索方法contains,若是字符串包含特定的字符序列,则返回true,当你只需知道字符串包含字符序列但使用精确位置并不重要时,请使用此方法。spa

下表描述了各类字符串搜索方法。code

方法 描述
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类只有不多的方法能够将字符或子字符串插入到字符串中,一般,不须要它们:你能够经过链接从字符串中删除的子字符串以及要插入的子字符串来建立新字符串。htm

可是,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

objects-lastIndexOf.gif

另请注意,扩展方法使用dot + 1做为substring的参数,若是点字符(.)是字符串的最后一个字符,则dot + 1等于字符串的长度,则大于字符串中的最大索引(由于索引从0开始),这是substring的合法参数,由于该方法接受的索引等于但不大于字符串的长度,并将其解释为“字符串的结尾”。


上一篇:在数字和字符串之间转换

下一篇:比较字符串和字符串的部分

相关文章
相关标签/搜索