我試圖制定出如下像這樣的模式分裂Java中的字符串的方法:如何從字符串中獲取數字和字母?
String a = "24ab4h";
從這個結果應該是以下幾點:
st[0] = "24";
st[1] = "a";
st[2] = "b";
st[3] = "4";
st[4] = "h";
然而,我完全不知道如何才能做到這一點。請,有人可以幫我嗎?我曾嘗試在網上搜索類似的問題,但是,在搜索中正確標記它是非常困難的。
我試圖制定出如下像這樣的模式分裂Java中的字符串的方法:如何從字符串中獲取數字和字母?
String a = "24ab4h";
從這個結果應該是以下幾點:
st[0] = "24";
st[1] = "a";
st[2] = "b";
st[3] = "4";
st[4] = "h";
然而,我完全不知道如何才能做到這一點。請,有人可以幫我嗎?我曾嘗試在網上搜索類似的問題,但是,在搜索中正確標記它是非常困難的。
嘗試在循環中處理您的字符串,char by char。
String a = "24ab4h";
如果集中CHAR(2
)是數 - 檢查下一個字符(4
)。如果下一個字符也是一個數字 - 繼續掃描。如果下一個字符與數字不同 - 保存焦點字符(或焦點字符序列,在本例中爲 - 24
)。
字母字符相同的邏輯。
我已經使用此代碼進行拆分但它不會將「ab」拆分爲「a」和「b」 Scanner sc = new Scanner(System.in); \t \t String str = sc.nextLine();字符串strA [] = str.split(「(?<= \\ D)(?= \\ d)|(?<= \\ d)(?= \\ D)」); –
是的。我明白你想要什麼,但我無法幫助你使用正確的正則表達式分割方法。或者,你可以使用'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」;' –
如果使用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);
它的工作原理。謝謝 –
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;
}
什麼是分裂的規則?每封信還是4後打破? – azurefrog
分裂數字和字母表。 –
但是你在「a」和「b」中拆分「ab」,但是你沒有拆分「24」嗎? ^^ – azro