Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用正则表达式获取java中姓氏的首字母_Java_Regex - Fatal编程技术网

如何使用正则表达式获取java中姓氏的首字母

如何使用正则表达式获取java中姓氏的首字母,java,regex,Java,Regex,输入:克里斯·盖尔 所需输出:Chris G 我目前正在使用: String inputStr = "Chris Gayle"; String[] strArr = inputStr.split(" "); String output =strArr[0] + " " + strArr[1].charAt(0); 但是,我希望通过使用模式匹配技术在String类中使用“replaceAll”函数,找到一个占用更少代码行的实现。通过replaceAll函数 string.replaceAll("

输入:克里斯·盖尔

所需输出:Chris G

我目前正在使用:

String inputStr = "Chris Gayle";
String[] strArr = inputStr.split(" ");
String output =strArr[0] + " " + strArr[1].charAt(0);

但是,我希望通过使用模式匹配技术在String类中使用“replaceAll”函数,找到一个占用更少代码行的实现。

通过replaceAll函数

string.replaceAll("(?<=\\s.).*", "");

上面的正则表达式将匹配前面有空格和单个字符的所有字符。

我实际上不会为此使用正则表达式

范例

输出

这里的优点是,您可以有多个项目的名称,即…Chris Foo Gayle->Chris Foo G

这意味着每个项目都用空格分隔,或者至少姓氏是。它将以克里斯·J·盖尔(Chris J.Gayle)这样的人物返回意想不到的结果

更糟糕的是,如果您的输入不包含任何空格,即单个名称。 如果这是一种可能的情况,您应该检查input.lastIndexOf!=-1在调用子字符串之前。

一行回答:

System.out.println("Chris Gayle".replaceAll("([a-z]*)$", ""));

注意:姓氏必须以大写字母开头。

不要根据代码行来衡量代码质量。您的代码运行良好,易于理解-这可能比超级复杂的正则表达式更值钱一些其他开发人员需要调试20分钟才能理解它。您尝试过吗?无论您选择哪种解决方案,
Chris G
System.out.println("Chris Gayle".replaceAll("([a-z]*)$", ""));