2015-09-06 83 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()); 
相關問題