I';我正在尝试编写一个Java方法,将名称格式化为Last,First m。。。对于任意数量的中间名 String nameStr=“乔治·雷蒙德·理查德·马丁”; 字符串formattedName=“”,firstName=“”,middleName=“”,lastName=“”,middleInitial=“”; int指数=0; 如果(nameStr.indexOf(“”==-1){// formattedName=nameStr.substring(0,1).toUpperCase().substring(1).toLowerCase(); } if(nameStr.indexOf(“”)=-1){ 字符串nameParts[]=nameStr.split(“”); int N=nameParts.length; 如果(N==2){//如果只有两个名称 firstName=nameParts[0]; lastName=nameParts[N-1]; firstName=firstName.substring(0,1).toUpperCase().substring(1).toLowerCase(); lastName=lastName.substring(0,1).toUpperCase().substring(1).toLowerCase(); formattedName=lastName+“,”+firstName; }else{//用于任何数量的名称 对于(index=1;index

I';我正在尝试编写一个Java方法,将名称格式化为Last,First m。。。对于任意数量的中间名 String nameStr=“乔治·雷蒙德·理查德·马丁”; 字符串formattedName=“”,firstName=“”,middleName=“”,lastName=“”,middleInitial=“”; int指数=0; 如果(nameStr.indexOf(“”==-1){// formattedName=nameStr.substring(0,1).toUpperCase().substring(1).toLowerCase(); } if(nameStr.indexOf(“”)=-1){ 字符串nameParts[]=nameStr.split(“”); int N=nameParts.length; 如果(N==2){//如果只有两个名称 firstName=nameParts[0]; lastName=nameParts[N-1]; firstName=firstName.substring(0,1).toUpperCase().substring(1).toLowerCase(); lastName=lastName.substring(0,1).toUpperCase().substring(1).toLowerCase(); formattedName=lastName+“,”+firstName; }else{//用于任何数量的名称 对于(index=1;index,java,methods,Java,Methods,formattedName=nameStr.substring(0,1).toUpperCase().substring(1).toLowerCase() 因此,首先从字符串nameStr中提取第一个字母,并将其转换为大写。接下来要做什么(substring(1))实际上是将您使用的单个字母替换为字符串的子字符串,而不是之前的整个字符串。您需要首先将该单个字母转换为大写,然后在另一行中将原始字符串的其余部分附加到新字符串中。如下所示: formattedName=nameStr.substrin

formattedName=nameStr.substring(0,1).toUpperCase().substring(1).toLowerCase()

因此,首先从字符串
nameStr
中提取第一个字母,并将其转换为大写。接下来要做什么(
substring(1)
)实际上是将您使用的单个字母替换为字符串的子字符串,而不是之前的整个字符串。您需要首先将该单个字母转换为大写,然后在另一行中将原始字符串的其余部分附加到新字符串中。如下所示:

formattedName=nameStr.substring(0,1.toUpperCase();
formattedName+=nameStr.substring(1.toLowerCase();

我想你需要的是方法。如果全名是一串空格分隔的单词,split会很快解决你的问题

我想你想让“乔治·雷蒙德·理查德·马丁”变成“乔治·R·R·马丁”,因为……好吧,他就是这么说的。否则,你还没有真正告诉我们规格是什么,但你会这样做的

String nameStr = "george raymond richard martin";

String formattedName = " ", firstName = " ", middleName = " ", lastName = " ", middleInitial = " ";

int index = 0;



if (nameStr.indexOf(" ") == -1) { //for one name case

    formattedName = nameStr.substring(0, 1).toUpperCase().substring(1).toLowerCase();

}

if (nameStr.indexOf(" ") != -1) {

    String nameParts[] = nameStr.split(" ");

    int N = nameParts.length;

    if (N == 2) { //if there are just two names

        firstName = nameParts[0];

        lastName = nameParts[N - 1];

        firstName = firstName.substring(0, 1).toUpperCase().substring(1).toLowerCase();

        lastName = lastName.substring(0, 1).toUpperCase().substring(1).toLowerCase();

        formattedName = lastName + ", " + firstName;

    } else { //for any amount of names

        for (index = 1; index <= N - 2; index++) {

            middleName = nameParts[index];

            firstName = nameParts[0];

            lastName = nameParts[N - 1];

            middleInitial = middleName.substring(0, 1).toUpperCase() + ".";

            formattedName = lastName + ", " + firstName + middleInitial;


        }
    }
}

System.out.println(formattedName);
String toShortenedName(String fullName){
断言(全名!=null);/:P
//在有1个或多个空格的位置拆分全名。
字符串[]nameParts=fullName.trim().split(\\s+);
//我们将用这个来建立我们的回报值。
StringBuilder nameBuilder=新的StringBuilder();
对于(int i=0;i0){
//不是第一次迭代;在之前的迭代中添加一个空格。
nameBuilder.append(“”);
}
字符串部分=名称部分[i];
if(i==0 | | i==nameParts.length-1){
//姓
nameBuilder.append(部分);
}否则{
char middleInitial=part.charAt(0);
nameBuilder.append(String.format(“%c.”,middleInitial));
}
}
返回nameBuilder.toString();
}

这是您的代码稍加更新:

String toShortenedName(String fullName) {
    assert(fullName != null); // :P

    // Split the fullName where there are 1-or-more whitespaces.
    String[] nameParts = fullName.trim().split("\\s+");
    // We'll be building our return value with this.
    StringBuilder nameBuilder = new StringBuilder();

    for (int i = 0; i < nameParts.length; i++) {
        if (i > 0) {
            // Not the first iteration; add a space to what came before.
            nameBuilder.append(' ');
        }

        String part = nameParts[i];
        if (i == 0 || i == nameParts.length - 1) {
            // first or last name
            nameBuilder.append(part);
        } else {
            char middleInitial = part.charAt(0);
            nameBuilder.append(String.format("%c.", middleInitial));
        }
    }

    return nameBuilder.toString();
}
//TODO自动生成的方法存根
//字符串名称tr=“乔治·雷蒙德·理查德·马丁”;
字符串名称tr=“帕布罗·迭戈·何塞·弗朗西斯科·德·保拉·胡安·内波穆塞诺·马里亚·德洛斯·西普里亚诺·德拉桑提尼达鲁伊斯和毕加索”;
字符串formattedName=“”,firstName=“”,middleName=“”,lastName=“”,middleInitial=“”;
int指数=0;
如果(nameStr.indexOf(“”==-1){//
formattedName=nameStr.substring(0,1).toUpperCase().substring(1).toLowerCase();
}
如果(nameStr.indexOf(“”)=-1){
字符串nameParts[]=nameStr.split(“”);
int N=nameParts.length;
firstName=nameParts[0];
lastName=nameParts[N-1];
如果(N==2){//如果只有两个名称
firstName=nameParts[0];
lastName=nameParts[N-1];
firstName=firstName.substring(0,1).toUpperCase().substring(1).toLowerCase();
lastName=lastName.substring(0,1).toUpperCase().substring(1).toLowerCase();
formattedName=lastName+“,”+firstName;
}else{//用于任何数量的名称

对于(index=1;index我发送了我的解决方案。也许可以帮助您。 输出:马丁,乔治R.R

// TODO Auto-generated method stub
  //String nameStr = "george raymond richard martin";
  String nameStr = "Pablo Diego José Francisco de Paula Juan Nepomuceno María de los Remedios Cipriano de la Santísima Trinidad Ruiz y Picasso";


    String formattedName = " ", firstName = " ", middleName = " ", lastName = " ", middleInitial = " ";

    int index=0;



    if(nameStr.indexOf(" ") == -1){ //for one name case

        formattedName = nameStr.substring(0,1).toUpperCase().substring(1).toLowerCase();

    }

    if(nameStr.indexOf(" ") != -1){ 

        String nameParts [] = nameStr.split(" ");

        int N = nameParts.length;

        firstName = nameParts[0];

        lastName = nameParts[N-1];



            if(N == 2){ //if there are just two names

                firstName = nameParts[0];

                lastName = nameParts[N-1];

                firstName = firstName.substring(0,1).toUpperCase().substring(1).toLowerCase();

                lastName = lastName.substring(0,1).toUpperCase().substring(1).toLowerCase();

                formattedName = lastName + ", " + firstName;

                    }else{  //for any amount of names

                        for(index = 1; index<=N-2; index++){

                            middleName = nameParts[index];

                            middleInitial = middleInitial + middleName.substring(0, 1).toUpperCase()+ ".";





                    }
                }
            }

            formattedName = lastName + ", " + firstName + middleInitial;
            System.out.println(formattedName);
String nameStr=“乔治·雷蒙德·理查德·马丁”;
字符串firstName=“”,lastName=“”,middleInitial=“”;
StringBuilder formattedName=新建StringBuilder();
StringBuilder nb=新的StringBuilder();
字符串[]splitNames=(nameStr.split(\\s+);

对于(int i=0;i0&&我别忘了用毕加索的全名:帕布罗·迭戈·何塞·弗朗西斯科·德·保拉·胡安·内波穆塞诺·马里亚诺·德洛斯·雷米多斯·西普里亚诺·德拉桑蒂斯马·特立尼达·鲁伊斯和毕加索来测试它。如果你不知道问题是什么,那么在发布之前你有更多的调试工作要做。作为旁白,使用正则表达式会让这更容易。看看t他的台词非常仔细:
.substring(0,1).toUpperCase().substring(1)
索引
1
后的子字符串长度
1
子字符串将始终为空字符串。两个名字(如Billy Bob Thornton)或两个姓氏(如Maria von Trapp)如何?使用Scanner类。将分隔符设置为空白,循环,将字符串放入列表中,然后选择第一个和最后一个一个,然后是其他的。大写的第一个字符并将字符串列表连接成一个。是的;我应该得到这些否决票。许多编译时错误。现在就修复它们!如果有任何问题,OP想要“Martin,George R.R.”,根据标题说“Last,first M…”
    String nameStr = "george raymond richard  martin";
    String  firstName = " ", lastName = " ", middleInitial = " ";
    StringBuilder formattedName=new StringBuilder();
    StringBuilder nb=new StringBuilder();


    String[] splitNames=(nameStr.split("\\s+"));

    for(int i=0;i<splitNames.length;i++){
        if(i>0 && i<splitNames.length-1) {
                splitNames[i]=splitNames[i].substring(0,1).toUpperCase()+".";
                nb.append(splitNames[i]);
        }else{

            splitNames[i]=splitNames[i].substring(0,1).toUpperCase()+splitNames[i].substring(1).toLowerCase();
        }

    }
    firstName=splitNames[0];
    lastName=splitNames[splitNames.length-1];

    formattedName.append(lastName);
    formattedName.append(", ");
    formattedName.append(firstName+" ");
    formattedName.append(nb);



    System.out.println(formattedName.toString());