如何从任何字符串中获取首字母缩略词?

时间:2015-09-06 07:28:42

标签: java string

假设我有一个字符串:

"  Hello Word  "

我如何获得首字母缩略词" HW"排除前导和尾随空格?

我尝试使用循环结构。但我想在不使用任何for循环或拆分方法的情况下完成它。

评论中OP的补充:
我只想得到字符串中每个单词的第一个字母,无论情况如何。如果字符串是" jon snow",我希望结果为" JS"

6 个答案:

答案 0 :(得分:6)

您可以使用正则表达式,但请注意正则表达式处理确实包含内部循环。

以下内容只会留下一个单词开头的字母,然后将它们转换为大写字母:

    String str = " hello World 18 times ";
    String result = str.replaceAll("\\B.|\\P{L}", "").toUpperCase();

这里的结果是“HWT”。

它会删除左边不在单词边界的每个字符,以及任何不是字母的字符(这将占用空格)。结果将转换为大写。

答案 1 :(得分:1)

如果您可以选择使用apache lib,请访问以下链接 http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/text/WordUtils.html#initials(java.lang.String)

在使用上面提到的正则表达式之前,请先了解两个选项的复杂性。此外,如果apache lib适合你,那么不需要再次旋转轮子用于相同的情况使用apache lib。

注意:在内部/外部,每个算法都遍历整个字符串。

答案 2 :(得分:0)

如果有,请使用WordUtils,否则,使用Java 8,您可以在没有循环的情况下执行以下操作(尽管它有分割):

String word = " Hello World ";
String result = Arrays.stream(word.trim().split(" "))
        .map(word -> word.charAt(0))
        .map(c -> c.toString().toUpperCase())
        .collect(Collectors.joining());

答案 3 :(得分:-2)

String [] tokens = "Hello World".split("[\\W]");
String newString = "";
for(String s:tokens){
    newString += s.charAt(0);
}
System.out.println("Acronym - " + newString);

没有循环的新答案 -

String[] acronym = myString.split("(?<=[\\S])[\\S]*\\s*");

答案 4 :(得分:-2)

使用Java默认Tokenizer方法。对字符串进行标记并在令牌的第一个索引处获取字符。 希望这会有所帮助

StringTokenizer defaultTokenizer = new StringTokenizer(str);
while (defaultTokenizer.hasMoreTokens())
{
    //get first letter of a token here
    defaultTokenizer.nextToken(); // will get u next token
}

答案 5 :(得分:-2)

试试这个: -

package com.test.servlet;
import java.io.IOException;
public class A1 {

    public static void main(String args[])throws IOException
    {
        String x = "Satvir Kumar Singh ";
        int c1;
          String result = x.replaceAll("[a-z ]", "").toUpperCase();
          System.out.println(result);
        /*for (int i = 0; i < x.length(); i++) {
            c1 = (int) x.charAt(i); 
            if(c1>=65 && c1<=96){
                System.out.print(x.charAt(i));
            }
        }*/
    }   
}

你可以试试这个。