我需要在字符串中获取第一个字母的位置。
遵循一个基本的例子。第一个字母是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);
}
}
答案 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