如何在第二个点java之后找到第一个字符

Suu*_*ule 6 java regex string java-8

你有什么想法我怎么能在字符串的第二个点之后得到第一个字符.

String str1 = "test.1231.asdasd.cccc.2.a.2";
String str2 = "aaa.1.22224.sadsada";
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,我应该得到a第二种情况2.我想到用点划分字符串,并提取第三个元素的第一个字符.但它似乎很复杂,我认为有更好的方法.

Eug*_*ene 10

这个正则表达式怎么样?

Pattern p = Pattern.compile(".+?\\..+?\\.(\\w)");
Matcher m = p.matcher(str1);

if (m.find()) {
     System.out.println(m.group(1));
}
Run Code Online (Sandbox Code Playgroud)

正则表达式说:以非贪婪的方式(.+?)一次或多次查找任何东西,必须后跟一个点(\\.),而不是以非贪婪的方式(.+?)后跟一个点(\\.)一次或多次.在匹配之后,取第一组中的第一个单词字符((\\w)).

  • OP没有强制要求所谓的字符成为单词字符,所以你应该只使用`.`而不是`\ w`.你可以避免重复自己:`模式p = Pattern.compile("(?:.+?\\.){2}(.)");`.如果你想在不经过`String`的情况下提取`char`,你也可以使用`Matcher m = p.matcher(str1); if(m.find()){char c = str1.charAt(m.start(1)); }`.或者,如果你想要一个字符串,你可以临时做:`String s = str1.replaceFirst("(?:.+?\\.){2}(.).*","$ 1"); `. (6认同)