如何获取字符串中第一个字母的位置

时间:2014-04-30 14:18:13

标签: java regex

我需要在字符串中获取第一个字母的位置。

遵循一个基本的例子。第一个字母是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);
     }
} 

3 个答案:

答案 0 :(得分:8)

如果,正如我所解释的那样,您正在通过正则表达式查找句子中的第一个字母字符或其索引,这是一个示例:

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

答案 1 :(得分: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());
}

答案 2 :(得分:1)

如果你不需要regex,你可以通过循环(我的推荐)来做到这一点

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
}

后者包括来自其他语言的一些字母字符 iffy 是否将它们列为characters or phrases

参考:Character.isLetterCharacter.isAlphabetic