假设我有一个字符串:
" Hello Word "
我如何获得首字母缩略词" HW"排除前导和尾随空格?
我尝试使用循环结构。但我想在不使用任何for循环或拆分方法的情况下完成它。
评论中OP的补充:
我只想得到字符串中每个单词的第一个字母,无论情况如何。如果字符串是" jon snow",我希望结果为" JS"
答案 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));
}
}*/
}
}
你可以试试这个。