2017-08-02 96 views
0

我試圖制定出如下像這樣的模式分裂Java中的字符串的方法:如何從字符串中獲取數字和字母?

String a = "24ab4h"; 

從這個結果應該是以下幾點:

st[0] = "24"; 
st[1] = "a"; 
st[2] = "b"; 
st[3] = "4"; 
st[4] = "h"; 

然而,我完全不知道如何才能做到這一點。請,有人可以幫我嗎?我曾嘗試在網上搜索類似的問題,但是,在搜索中正確標記它是非常困難的。

+1

什麼是分裂的規則?每封信還是4後打破? – azurefrog

+0

分裂數字和字母表。 –

+2

但是你在「a」和「b」中拆分「ab」,但是你沒有拆分「24」嗎? ^^ – azro

回答

0

嘗試在循環中處理您的字符串,char by char。

String a = "24ab4h"; 

如果集中CHAR(2)是數 - 檢查下一個字符(4)。如果下一個字符也是一個數字 - 繼續掃描。如果下一個字符與數字不同 - 保存焦點字符(或焦點字符序列,在本例中爲 - 24)。

字母字符相同的邏輯。

+0

我已經使用此代碼進行拆分但它不會將「ab」拆分爲「a」和「b」 Scanner sc = new Scanner(System.in); \t \t String str = sc.nextLine();字符串strA [] = str.split(「(?<= \\ D)(?= \\ d)|(?<= \\ d)(?= \\ D)」); –

+0

是的。我明白你想要什麼,但我無法幫助你使用正確的正則表達式分割方法。或者,你可以使用'StringBuilder'來編號。和字母字符處理沒有StringBuilder(因爲你只需要1個字符)。當部分字符串準備就緒時,將其添加到ArrayList。當您完成處理整個字符串時,將ArrayList轉換爲簡單的字符串數組。 'String [] st = arrayList.toArray(new String [0]);'所以你會得到 'st [0] =「24」; st [1] =「a」; st [2] =「b」; st [3] =「4」; st [4] =「h」;' –

2

如果使用split()功能,你會失去其作爲分隔符的元素,所以我想用一個模式是更好:

public static void main(String args[]) { 

    Matcher m = Pattern.compile("\\d+|[a-zA-Z]").matcher("24ab4h"); 

    List<String> res = new ArrayList<>(); 

    while (m.find()) { 
     res.add(m.group()); 
    }  
} 

格局將檢測所有組數字或字符alpabet獨自一人,然後它會添加所有到List(優於array,因爲你不知道的大小)


如果你真的想要一個數組末,2個解決方案List<String> ->String[]

  • String[] array = res.toArray(new String[res.size()]);

  • String[] array = res.stream().toArray(String[]::new);

+0

它的工作原理。謝謝 –

0
public static void main(String[] args) { 

    /* 
    * Stack stack = new Stack(5); stack.push("10"); stack.push("20"); 
    * stack.push("20"); stack.push("20"); stack.push("20"); 
    * stack.push("20"); stack.push("20"); stack.displayStack(); 
    */ 

    String a = "24ab4h"; 
    System.out.println(Arrays.deepToString(splitString(a))); 

} 

private static String[] splitString(String a) { 

    char[] result = new char[a.length()]; 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < a.length(); i++) { 
     if (isNumber(a.charAt(i))) { 
      if (i != 0 && !isNumber(a.charAt(i - 1))) 
       sb.append(" "); 
       sb.append(a.charAt(i)); 
     } else { 
      sb.append(" "); 
      sb.append(a.charAt(i)); 
     } 
    } 
    return sb.toString().split(" "); 
} 

private static boolean isNumber(char c) { 
    try { 
     Integer i = Integer.parseInt(String.valueOf(c)); 
    } catch (NumberFormatException nfe) { 
     return false; 
    } 
    return true; 
} 
相關問題