如下:
String str="abc123";
有这样的规则:该字符串由字母(大小写不限)和数字组成,字母在前。数字在后,不存在数字和字母交叉的情况,如何获取该字符串中的字母部分,最好由正则来实现。

解决方案 »

  1.   

    自己写了一个,大家指正一下
    String str="abc123";
    String trim = str.replaceAll("\\d", "").trim();
      

  2.   

    1,字母在前
    2,数字在后
    3,不存在数字和字母交叉的情况遍历从0到9,在该str里的最前面位置,并保存在数组arr[]里。对比arr[]里最小的值,得到int mix然后截取str的下标mix到末尾的字符串。给分吧?
      

  3.   

    确保字符串是“aaaa123243”这样类型的,绝对不会是“aaa1234123abc”这样类型的。public class Test {    public static void main(String[] args) {
            String str="abc123a";
            String s = str.replaceAll("[^a-zA-Z].+$", "");
            System.out.println(s);
            
            System.out.println(findLetter(str));
        }
        
        public static String findLetter(String str) {
            if(str == null || str.length() == 0) {
                return str;
            }
            char[] chs = str.toCharArray();
            int k = 0;
            for(int i = 0; i < chs.length; i++) {
                if(!isAsciiLetter(chs[i])) {
                    break;
                }
                k++;
            }
            return new String(chs, 0, k);
        }
    }说实在的,很不想回复的,题目不是很明确,也未完全肯定前面都是字母,后面都是非字母。
      

  4.   

        private static boolean isAsciiLetter(char c) {
            return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
        }少贴一个方法
      

  5.   

    正则表达式方法那个把 .+ 改成 .*String s = str.replaceAll("[^a-zA-Z].*$", "");如果字符串中还有换行符的话,要改成这样:String s = str.replaceAll("(?s)[^a-zA-Z].*$", "");如果题目要求不明确,用正则表达式能有一万种写法!
      

  6.   

    这个方法中的
    private static boolean isAsciiLetter(char c) {
    return (c >= 'a' &amp;&amp; c <= 'z') || (c >= 'A' &amp;&amp; c <= 'Z');
    }
    -------
    存在这个&amp;&amp;
    无法编译啊
      

  7.   

    我的方法:计算第一个数字的位置,然后截串。private static String getEndLetter(String s) {
    for (int i = 0; i < s.length(); i++) {
    char c = s.charAt(i);
    if(c >= 49 && c <= 58) {
    return s.substring(i);
    }
    }
    return "";
    }输入串只能是aaabb11234,这样的格式aa214ad会截取错误,方法没有做校验。
    要校验的话,使用楼上他们的正则吧
      

  8.   

    public class Test { public static void main(String args[]) {
    String str = "abc124";

    for(int i = 0; i < str.length(); i ++) {
    char c = str.charAt(i);
    if(c >= '0' && c <= '9') {
    String newStr = str.substring(0, i);
    System.out.println(newStr);
    break;
    }
    }
    }
    }
    楼主自己测试下,可以请给分,谢谢!
      

  9.   

        public static void main(String[] a){
            String s = "abc123abc456ab1c235";
            String s1 = "abc123";
            Pattern p = Pattern.compile("([\\w&&[\\D]]+)([\\d]+)");
            Matcher m = p.matcher(s);
            if (m.matches())
                System.out.println(s + " :" + m.group(2));                    
            m = p.matcher(s1);
            if (m.matches())
                System.out.println(s1+" "+m.group(2));        
        }
      

  10.   

    str.replaceAll("[0-9]", "").trim();
      

  11.   

    public class Test {public static void main(String args[]) {
    String str = "abssssssssssssssssssssc1241111111111111111111111111111aa";
    String s=str.replaceAll("\\d", "").trim();
    System.out.println(s);
    }
    }
    楼主
    这个试试。
      

  12.   

    其实我想说的是,replaceAll用到的就是正则表达式
      

  13.   

    每个数字和字母都会对应一个ASCII码,可以根据判断ASCII值判断是字母是哪个字母,还是数字实施这个就行了