2015-09-06 87 views
-1

假设我有这样的字符串:如何从任何字符串中获取首字母缩略词?

" Hello Word " 

如何获得的首字母缩写“HW”不包括前端和后端的空间?

我试过用循环结构。但我想这样做,而不使用任何for循环或拆分方法。

OP中的其他内容在评论中:
我只想得到字符串中每个单词的第一个字母,而不考虑大小写。如果字符串为“乔恩雪”,我想结果为“JS”

+2

所以你要删除这不是任何字符大写字母?考虑一个正则表达式... –

+0

不,我只想得到字符串中每个单词的第一个字母,而不考虑大小写。如果字符串是“jon snow”,我想要结果为“JS” – Ishtiaq

+1

试试这个(最后一个也许?):http://stackoverflow.com/questions/26180992/get-the-first-character-of-each -word-in-a-string – FreudianSlip

回答

6

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

下面将只留下信件,它们在一个单词的开头,然后将其转换为大写:

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

结果这里是“HWT”。

它删除不在其左边的字边界上的每个字符,以及任何不是字母的字符(这将处理空格)。结果转换为大写。

+1

RealSkeptic,虽然你的回答是正确的;他如何构思这个问题的解决方案和手段是非常深奥的。我们不应该用一个可能有2%的工程师能够理解的正则表达式来解决这个问题。我们应该为他提供一种通用的最佳实践方法,这在行业中更为常用。 –

+0

最佳答案。它应该被接受。 –

+0

'String result = x.replaceAll(“[az]”,“”).toUpperCase();'这也可以正常工作 – SaviNuclear

-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*"); 
+0

“我想不做任何for循环” – Zarwan

+0

编辑同样的答案 –

+0

OP表示不使用split()方法。 – Andreas

-2

使用Java默认分词方法。标记字符串并获取标记第一个索引处的字符。 希望这将有助于

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

“StringTokenizer”类的文档说:*“StringTokenizer”是一个遗留类,由于兼容性原因而被保留,尽管在新代码中不鼓励使用它。“* – RealSkeptic

+0

这是唯一不使用'for '或'分裂'虽然。 –

+0

OP表示无回路 – Andreas

-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)); 
      } 
     }*/ 
    } 
} 

你可以试试这个呢。

+0

OP在评论中提到他希望“字符串中每个单词的第一个字母,而不考虑大小写”。 – Andreas

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()); 
相关问题