如何获取LastName,FirstName的字符串并返回FirstInitial.LastName

时间:2016-03-18 18:09:02

标签: java

预期输入:Doe,John

预期输出:J。Doe

     public static void main(String[] args) {

         String z = "Doe, John";
         System.out.println(z);
         String y = formatName(name);
         System.out.println(y);
     }

     public static String formatName(String name) {
        String str[] = name.split(",");
        StringBuilder sb = new StringBuilder();
        sb.append(str[1].charAt(0));
        sb.append(". ");
        sb.append(str[0]);
        return sb.toString();
   }

我的输出不符合预期。

4 个答案:

答案 0 :(得分:4)

匹配(可选)带有split正则表达式

的空格

输入中的逗号后面有空格,您可以在String str[] = name.split(","); 中修改正则表达式

String str[] = name.split(",\\s*");

Doe, John
J. Doe

匹配并删除可选空白区域。完成上述更改后,我运行了您的代码,并得到了(预期的)输出

trim

修剪前导空格

或者 str[1] sb.append(str[1].trim().charAt(0)); //<-- will also remove leading space 才能获得第一个字符

Pattern

使用已编译// Match (and group) one more characters followed by a "," and // optional whitespace. Then match (and group) one character followed // any number of optional characters. private static Pattern pattern = Pattern.compile("(.+),\\s*(.).*"); public static String formatName(String name) { Matcher m = pattern.matcher(name); if (m.matches()) { return String.format("%s. %s", m.group(2), m.group(1)); } return name; }

的正则表达式

另一个 可能的选项是编译正则表达式 Pattern并使用Matcher之类的

<link href="css/ionic.app.css" rel="stylesheet"> 
<link href="lib/toaster/toaster.css" rel="stylesheet"> 
<!-- ionic/angularjs js --> 
<script src="lib/ionic/js/ionic.bundle.js"></script>
<!-- angular touch --> 
<script src="lib/angular-touch/angular-touch.js"></script>
<!-- cordova script (this will be a 404 during development) --> 
<script src="cordova.js"></script>

答案 1 :(得分:2)

另一种获取FirstInitial.LastName

的简单方法

除了使用split之外,您可以使用子字符串并根据逗号,的位置,操作名称以获取输出:

String s = "Doe, John";

s = s.replace(" ", "");                                      //remove spaces
int i = s.indexOf(",");                                      //get pos of comma
String name = s.charAt(i+1) + ". " + s.substring(0, i);      //create name

<强>输出:

J. Doe

答案 2 :(得分:1)

sb.append(str[1].charAt(0));charAt()的索引应为1而不是0.

String str[] = name.split(",");将返回[Doe, John],注意第二个元素之前的空格。

更好地使用split(", ")

答案 3 :(得分:1)

我根据我的理解尝试了这个。用于循环和修剪项目

public static String formatName(String name) {
        String str[] = name.split(",");
        for(int i = 0 ; i < str.length ; i++){
            str[i] = str[i].trim();
            //System.out.println("+"+str[i]+"+");
        }

        StringBuilder sb = new StringBuilder();
        sb.append(str[1].charAt(0));
        sb.append(".");
        sb.append(str[0]);
        sb.append(".");
        return sb.toString().trim();
    }