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());