Java将全名更改为缩写。姓

时间:2018-09-03 15:24:20

标签: java arrays string

我拥有一个需要转换的球员​​姓名数据库,以便能够与他们进一步合作(例如:我需要Antonio Brown转换为A. Brown)。我的问题是还有一些名称仅包含名字(例如Antonio),因此我得到了ArrayIndexOutOfBoundsException: 1,还有另一种获取我想要的东西的方法,即使if条件stil split也为什么得到它?

if(spalte[1].contains(" ")){
   String[] me = spalte[0].split(" ", 2);
   String na = me[0].substring(0);
    name = na + ". " + me[1];
} else {
    name = spalte[1];
}

1 个答案:

答案 0 :(得分:0)

首先,我强烈建议您保持代码格式化并正确命名变量。它不仅可以帮助其他人更好地理解摘录,还可以使调试更加容易。

在处理数组和String::split时,您必须小心使用索引,因为它们很容易溢出。

是否需要使代码处理多个空格:Antonio Light Brown -> A. L. Brown?这些步骤很简单,几乎可以使用任意数量的名称:

  • 由空格分隔符分隔
  • 缩小n-1的第一个分区
  • 将字符串串联起来

代码如下:

String split[] = name.trim().split(" ");     // Trim the multiple spaces inside to avoid empty parts
StringBuilder sb = new StringBuilder();      // StringBuilder builds the String

for (int i=0; i<split.length; i++) {                      // Iterate the parts
    if (i<split.length -1) {                              // If not the last part
        sb.append(split[i].charAt(0)).append(". ");       // Append the first letter and a dot
    } else sb.append(split[i]);                           // Or else keep the entire word
}

System.out.println(sb.toString());           // StringBuilder::toString returns a composed String

假设:您将如何处理诸如O'Neilde Anthony之类的名称?您可以在for-loop中包括条件串联。