2014-04-30 126 views
-2

我需要獲取字符串中第一個字母的位置。如何獲取字符串中第一個字母的位置

請看一個基本的例子。第一個字母是T,所以我需要知道T的位置,因爲我可以使用indexOf("T")

我想用正則表達式的第一個字母來代替添加硬編碼的字母(T)。

在此先感謝。

public class RegexMatches { 
    public static void main(String args[]) { 

     String line = "000 1 This is my message"; 
     int first = line.indexOf("T"); 
     line = line.substring(first, line.length()); 

     System.out.println(line); 
    } 
} 
+6

你怎麼了? – Maroun

+0

[Java:方法來獲取一個字符串中的匹配位置?]的可能重複(http://stackoverflow.com/questions/2615749/java-method-to-get-position-of-a-match-in-字符串) – Robin

+0

@Robin:但這個問題不考慮正則表達式匹配,是嗎? –

回答

8

如果我正確閱讀Java docs,那麼您正在尋找匹配對象的start方法:

String line = "000 1 This is my message"; 
Pattern p = Pattern.compile("\\p{L}"); 
Matcher m = p.matcher(line); 
if (m.find()) { 
    System.out.println(m.start()); 
} 
7

如果像我解釋,你正在尋找一個句子或通過正則表達式其索引的第一個字母字符,這裏有一個例子:

String line = "000 1 This is my message"; 
Pattern p = Pattern.compile("\\p{Alpha}"); 
Matcher m = p.matcher(line); 
if (m.find()) { 
    System.out.println(m.group()); 
    System.out.println("At: " + m.start()); 
} 

輸出

Found: T 
At: 6 
0

如果您不需要regex你可以通過(我reccomendation)

public int findFirstLetterPosition(String input) { 
    char c; 
    for (int i = 0; i < input.length(); i++) { 
     c = input.charAt(i); 
     if ((c >= 'a' && c <= 'z') || (c >= 'A' || c <= 'Z')) { 
      return i; 
     } 
    } 
    return -1; // not found 
} 

編輯

循環在迴應一些評論做到這一點,你也可以做這不太明確地使用內置的靜態方法,並使用isLetter添加一些非ASCII字符的處理:

public int findFirstLetterPosition(String input) { 
    for (int i = 0; i < input.length(); i++) { 
     if (Character.isLetter(input.charAt(i))) { 
      return i; 
     } 
    } 
    return -1; // not found 
} 

您還可以使用isAlphabetic

public int findFirstLetterPosition(String input) { 
    for (int i = 0; i < input.length(); i++) { 
     if (Character.isAlphabetic(input.charAt(i))) { 
      return i; 
     } 
    } 
    return -1; // not found 
} 

後者包括從它們是否對他們BOX作爲characters or phrases

裁判玄乎其他語言中的某些字母字符:Character.isLetterCharacter.isAlphabetic

+1

你會爲非ASCII字符做什麼? – Thomas

+1

爲什麼不'if(Character.isLetter(c))'? –

+0

@Thomas看我的編輯 –

相關問題