我正试图找出一种在java中拆分字符串的方法,该方法遵循如下模式:
String a = "24ab4h";
此结果应如下:
st[0] = "24";
st[1] = "a";
st[2] = "b";
st[3] = "4";
st[4] = "h";
然而,我完全不知道如何实现这一目标。拜托,有人可以帮帮我吗?我尝试在网上搜索类似的问题,但是,在搜索中正确地说出它是非常困难的。
答案 0 :(得分:2)
如果您使用split()
函数,则会松散用作分隔符的元素,因此我认为使用Pattern更好:
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 char,然后它将全部添加到List
(优于array
,因为您不知道大小)
如果你真的想要一个数组,那么List<String> ->String[]
的两个解决方案:
String[] array = res.toArray(new String[res.size()]);
String[] array = res.stream().toArray(String[]::new);
答案 1 :(得分:0)
尝试在循环中处理String,char by char。
String a = "24ab4h";
如果焦点char(2
)是数字 - 请检查下一个字符(4
)。如果下一个字符也是数字 - 继续扫描。如果下一个字符与数字不同 - 保存焦点字符(或焦点字符序列,在此示例中为 - 24
)。
字母表字符的逻辑相同。
答案 2 :(得分: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;
}