Java 当我想缩写两个单词时,我会出错

Java 当我想缩写两个单词时,我会出错,java,string,Java,String,我想缩写名字,给定的名字包括3个或更多的名字。 另外,我想把“.”放在它们之间。 多谢各位 比如说 sam harris dorothy 我的期望输出如下 s.h.d 我的代码是这样的 public class AbbreviateTwoWords { public static void main(String[] args) { String shs = abbrevName("Sam Harris");

我想缩写名字,给定的名字包括3个或更多的名字。 另外,我想把“.”放在它们之间。
多谢各位

比如说
sam harris dorothy
我的期望输出如下
s.h.d

我的代码是这样的

    public class AbbreviateTwoWords {
        public static void main(String[] args) {

            String shs = abbrevName("Sam Harris");
            System.out.println(shs);
        }

        public static String abbrevName(String name) {
        
            String[] splitnamelist = name.split(" ");
            char[] shortform = new char[10];
            String point = ".";
        
            int initial = 0;
            for (String i : splitnamelist) {
                if (initial % 2 == 0) {
                    shortform[initial] = i.charAt(0);
        
                    initial++;
                } else {
                    shortform[initial]=point;
                    initial++;
                }

                return new String(shortform);
            }
        }
    }

为什么要复杂化并使用char数组,我猜它和索引有关,不管怎样,只要使用string和concatenate即可:

 public static String abbrevName(String name) {
            
         String[]splitnamelist=name.split(" ");
         String shortform="";
 
         
         for (String currentName:splitnamelist) {
             shortform=shortform+currentName.charAt(0);
             shortform=shortform+".";
         }
          //remove the last dot
         if (shortform.length()>0)
         {
         shortform=shortform.substring(0, shortform.length()-1);
         }
         return shortform;
     }
公共类缩写名称{
公共静态void main(字符串[]args){
缩写名称shs=新缩写名称();
shs.abbrevName(“山姆·哈里斯·多萝西”);
}
public void abbrevName(字符串名称){
字符串splitName[]=name.split(“”),separatedName=“”;
int i=0;//删除最后一个“+”符号。
for(字符串键:splitName){
单独的dname+=键;

如果(i如果允许您使用Java 8+流,您可以创建以下缩写:

import java.util.*;
import java.util.stream.*;

public class Main {
    public static String abbreviate(String input) {
        if (null == input || input.isEmpty()) {
            // nothing to abbreviate
            return input;
        }
        return Arrays.stream(input.split("[.\\s]+")) // split input line by 1 or more whitespaces or dot
                     .map(s -> s.substring(0, 1)) // get first letter
                     .collect(Collectors.joining(".")); // join letters into string with "." delimiter
    }
}
在此代码中,分隔符中还包含一个点“
”,以正确处理输入字符串中存在的缩写

测试和测试:

输出:

'Jerome K. Jerome' -> 'J.K.J'                                                                                                                        
'Robert Louis Stevenson' -> 'R.L.S'                                                                                                                  
'Charles Lutwidge Dodgeson' -> 'C.L.D'

Java8
中,我们可以用几行代码来完成这项工作

String shs = "sam harris dorothy";
String shortform = Arrays.stream(shs.split(" "))
        .map(s -> s.substring(0, 1))
        .map(s -> s.concat("."))
        .collect(Collectors.joining());
这是输出:

System.out.println(shortform); //Output is: s.h.d.
System.out.println(shortform.substring(0, shortform.length()-1)); //Output is: s.h.d

您声明您看到了一个错误--您得到了什么错误?完整的消息有帮助
String shs = "sam harris dorothy";
String shortform = Arrays.stream(shs.split(" "))
        .map(s -> s.substring(0, 1))
        .map(s -> s.concat("."))
        .collect(Collectors.joining());
System.out.println(shortform); //Output is: s.h.d.
System.out.println(shortform.substring(0, shortform.length()-1)); //Output is: s.h.d