2016-09-06 144 views
2

我有輸入,比如的Java獲取第一個字符值的字符串

AS23456SDE

MFD324FR

我需要得到像

AS,MFD第一個字符值

還有沒有前兩個或前三個字符輸入可以改變。需要獲得之前的第一個字符

謝謝。

編輯:這是我試過的。

public static String getPrefix(String serial) { 
    StringBuilder prefix = new StringBuilder(); 
     for(char c : serial.toCharArray()){ 
      if(Character.isDigit(c)){ 
       break; 
      } 
      else{ 
       prefix.append(c); 
      } 
     } 
     return prefix.toString(); 
} 
+0

字符串轉換成char []並嘗試使用Character.isDigit(string.charAt (沒有。))。 –

回答

1

我認爲這可以通過完成簡單的正則表達式匹配數字和java的string split function。這種基於正則表達式的方法比使用更復雜的正則表達式的方法更有效率。

的東西,下面將工作

String inp = "ABC345."; 
String beginningChars = inp.split("[\\d]+",2)[0]; 
System.out.println(beginningChars); // only if you want to print. 

我用"[\\d]+"正則表達式轉義爲Java了。

它做什麼?

它匹配一個或多個數字(d)。 d與unicode中的任何語言的數字匹配(所以它也匹配日本和阿拉伯數字)

String beginningChars = inp.split("[\\d]+",2)[0]是做什麼的?

它應用此正則表達式並將字符串分隔到找到匹配的字符串數組中。因爲您需要起始字符,所以末尾的[0]會從該數組中選擇第一個結果。

什麼是.split(regex,int)的第二個參數,我以2的形式提供?

這是極限參數。這意味着正則表達式將應用於字符串,直到找到1個匹配。一旦找到匹配項,字符串就不會被處理了。

與琴絃的Javadoc頁:

限參數控制的被施加圖案的次數,並因此影響所得陣列的長度。如果極限值n大於零,那麼模式將最多應用n-1次,數組的長度不會大於n,並且數組的最後一項將包含超出最後匹配分隔符的所有輸入。如果n是非正值,那麼該模式將盡可能多地應用,並且該數組可以具有任何長度。如果n爲零,則模式將盡可能多次應用,數組可以有任意長度,並且尾隨的空字符串將被丟棄。

如果您的字符串很大,這將是有效的。

其它可能的正則表達式,如果你要分割僅英語數字

「[0-9] +」

+0

似乎這不起作用 – user2473015

+1

@ user2473015:我測試了一些情況下,我可能錯過了一些東西!,你能告訴我這個失敗的輸入,所以我可以嘗試。 – faizan

+0

它返回相同的字符串,我通過。我試着用AS123 // public static String getPrefix(String serial){ return serial.split(「[\\ d] +」,1)[0]; } – user2473015

3

一個簡單的解決方案可以是這樣的:

public static void main (String[]args) { 

    String str = "MFD324FR"; 
    char[] characters = str.toCharArray(); 

    for(char c : characters){ 
     if(Character.isDigit(c)) 
      break; 
     else 
      System.out.print(c); 
    } 
} 
+1

是的,我喜歡這個簡單的解決方案。當方法描述他們在做什麼時,我喜歡它。 –

1
public static void main(String[] args) { 
     String testString = "MFD324FR"; 
     int index = 0; 
     for (Character i : testString.toCharArray()) { 
      if (Character.isDigit(i)) 
       break; 
      index++; 
     } 
     System.out.println(testString.substring(0, index)); 

} 

它遇到的一個數字(即,整數)在此之前打印第一字符 'n'。

4

這是一個不錯的單線解決方案。它使用正則表達式來匹配字符串中的第一個非數字字符,然後用此匹配替換輸入字符串。

public String getFirstLetters(String input) { 
    return new String("A" + input).replaceAll("^([^\\d]+)(.*)$", "$1") 
            .substring(1); 
} 

System.out.println(getFirstLetters("AS23456SDE")); 
System.out.println(getFirstLetters("1AS123")); 

輸出:

AS 
(empty) 
+0

如果我輸入1AS123,這將返回相同的值。 – user2473015

+1

@ user2473015我更新了答案,如果輸入以數字開頭(即沒有字母),它將返回一個空字符串。 –

3

使用下面的函數來獲得所需的輸出

public String getFirstChars(String str){ 
int zeroAscii = '0'; int nineAscii = '9'; 
String result = ""; 
for (int i=0; i< str.lenght(); i++){ 
    int ascii = str.toCharArray()[i]; 
    if(ascii >= zeroAscii && ascii <= nineAscii){ 
    result = result + str.toCharArray()[i]; 
    }else{ 
    return result; 
    } 
} 
return str; 

} 

通過你的字符串作爲參數

相關問題