如何从字符串中获取数字和字母?

时间:2017-08-02 20:21:36

标签: java

我正试图找出一种在java中拆分字符串的方法,该方法遵循如下模式:

String a = "24ab4h";

此结果应如下:

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

然而,我完全不知道如何实现这一目标。拜托,有人可以帮帮我吗?我尝试在网上搜索类似的问题,但是,在搜索中正确地说出它是非常困难的。

3 个答案:

答案 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;
}