假设我有一个字符串"12345.6789abcd23"
所以我的字符串以数字开头,然后是字母字符,然后它可能包含其他数字
所以我想要的是"12345.6789"
和"abcd23"
请注意,这只是一个示例,因此indexOf()
无济于事,
如果我能得到第一个字母表的索引很棒
答案 0 :(得分:4)
您可以合并Pattern
和Matcher
来实现:
final Pattern line = Pattern.compile("^[^a-zA-Z]+(.).*");
final Matcher m = line.matcher(your_line);
if (m.matches())
Log.d("FirstLetter", "My first letter is: " + m.group(1));
这基本上会使用正则表达式并从a-z
的开始处删除与A-Z
和String
之间的范围不匹配的任何内容,然后返回第一个字符在它之后,预计是字母字符。这就是为什么它在括号之间,用.group(1)
得到它。
^
句中的第一个compile
表示要匹配的String
的开头。
[]
之间的任何内容代表一组。所以,我代表一个范围,a-z
将扩展为任何字母字符。但是,集合开始时的^
意味着不同的东西。这意味着不,所以我想摆脱任何与字母字符不匹配的东西。
加号(+
)表示此集合意味着至少有1个且最多无限数量的字符与上述集合匹配。如果在String
的初始化时无法获得非字母字符,请使用*
而不是+
。这代表任何次出现次数,包括零。
下一个字母 将是字母,所以我想抓住它,我用点(.
)代表它。点代表一次的任何字符。我用括号括起来,因为我希望能够用Matcher
以某种方式选择它。
我不介意其余的,只是把。*(任何时候任何字符(包括0次)