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的合法參數,由於該方法接受的索引等於但不大於字符串的長度,並將其解釋爲「字符串的結尾」。


上一篇:在數字和字符串之間轉換

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

相關文章
相關標籤/搜索