获取String中每个单词的第一个字符

时间:2014-10-03 14:35:31

标签: java string

我正在努力让一个程序工作,它执行以下操作:

假设我们有String名为name,设置为"Stack Overflow Exchange"。我想输出给用户"SOE",每个单词的第一个字符。我尝试使用split()方法,但我没有做到。

我的代码:

public class q4 {
    public static void main(String args[]) {
        String x = "michele jones";
        String[] myName = x.split("");
        for(int i = 0; i < myName.length; i++) {
            if(myName[i] == "") {
                String s = myName[i];
                System.out.println(s);
            }              
        }         
    }     
}   

我试图检测是否有空格,然后我可以简单地采用下一个索引。谁能告诉我我做错了什么?

11 个答案:

答案 0 :(得分:12)

String initials = "";
for (String s : fullname.split(" ")) {
  initials+=s.charAt(0);
}
System.out.println(initials);

这是这样的:

  1. 声明变量&#34;缩写&#34;保持结果
  2. 在空格中拆分全名字符串,并迭代单个单词
  3. 将每个单词的第一个字符添加到首字母
  4. 编辑:

    正如所建议的,字符串连接通常效率不高,如果你处理非常长的字符串,StringBuilder是一个更好的选择:

    StringBuilder initials = new StringBuilder();
    for (String s : fullname.split(" ")) {
      initials.append(s.charAt(0));
    }
    System.out.println(initials.toString());
    

    编辑:

    您可以简单地将String作为字符数组获取:

    char[] characters = initials.toString().toCharArray();
    

答案 1 :(得分:4)

尝试按" "(空格)进行拆分,然后获取每个单词的charAt(0)(第一个字符)并按照以下方式打印:

public static void main(String args[]) {
    String x = "Shojibur rahman";
    String[] myName = x.split(" ");
    for (int i = 0; i < myName.length; i++) {
        String s = myName[i];
        System.out.println(s.charAt(0));
    }
}

答案 2 :(得分:2)

您的代码中存在许多错误:

String [] myName=x.split("");

你真的想分开""(空字符串)吗?你可能想分开空格:

String [] myName=x.split(" ");

if(myName[i]=="")

永远不要在Java中将字符串与==进行比较,始终使用.equals

if (myName[i].equals(""))

答案 3 :(得分:2)

使用Java 8流:

String initials = Arrays.stream(str.split(" "))
    .map(s -> s.substring(0, 1))
    .collect(Collectors.joining());
System.out.println(initials);

答案 4 :(得分:2)

如果您使用的是kotlin,则可以使用以下代码获取初始字符

 val myName = name.split(" ")
 val initial = myName.fold("", { acc, s -> acc + s[0] })
 print(initial)

答案 5 :(得分:1)

您需要将其拆分为不能用“”拆分的空格。它没有任何意义。 你做错的另一件事是===在字符串比较中是不正确的。请参阅How do I compare strings in Java?

public class q4 {
   public static void main(String args[])
   {
       String x="Shojibur rahman";
       String [] myName=x.split(" ");
       for(int i=0; i<myName.length; i++)
       {
           if(!myName[i].equals(""))
           {
               System.out.println(myName[i]);
           }               
       }          
   }     
}

答案 6 :(得分:1)

你正在分裂一个空字符串而不是一个空格&#34; &#34 ;.你的循环也没有多大意义,我不知道你想要做什么。

   String [] myName=x.split(" ");
   for(int i=0; i<myName.length; i++)
   {
       if (!myName[i].isEmpty()) {
          System.out.println(myName[i].charAt(0));
       }              
   }          

答案 7 :(得分:1)

由于您的程序不具备线程安全性,因此您可以使用StringBuilder。 对于长字符串,我建议您使用StringTokenizer

答案 8 :(得分:1)

令人惊讶的是,没有人提及使用已经可用的库。可以在这里WordUtils的形式使用commons-text

String name = "My Name";
String initials = WordUtils.initials(name);
System.out.println(initials);  // Outputs:  MN

答案 9 :(得分:1)

上面编写的split方法可以正常工作,但在以下情况下会导致错误:

  1. 以空格开头的字符串第一个单词
  2. 而且,如果字符串在单词之间有多个空格

从用户那里获得价值时,可能会发生上述书面情况, 在这种情况下,您可以使用:-

    String SubName = "input text provided by user"
    String initialsOfSubName = "";
    boolean v = true;
    for (int i = 0; i < SubName.length(); i++) {
        // If it is space, set v as true.
        if (SubName.charAt(i) == ' ')
            v = true;
        else if (SubName.charAt(i) != ' ' && v == true) {
            initialsOfSubName += (SubName.charAt(i));
            // on the place of string you can store it in an, array or list;
            v = false;
        }
    }
    Log.d("testRegex",initialsOfSubName);

答案 10 :(得分:0)

Java 8中接受的回复:

/**
 * Gets the first character of every word in the sentence.
 *
 * @param string
 * @return
 */
public static String getFirstLetterFromEachWordInSentence(final String string) {
    if (string == null) {
        return null;
    }
    StringBuilder sb = new StringBuilder();
    Arrays.asList(string.split(" ")).forEach(s -> sb.append(s.charAt(0)).append(" "));
    return sb.toString().trim();
}