写一个处理字符串的方法,要求method(Strig s)返回该字符串中最后一个出现的数字,比如字符串“afsafa2as3434f3434dafsdf4”返回4,“adfjsdl3434adfjl;afds234fasdf3344adsf”返回3344

解决方案 »

  1.   

    很有意思的题目。public static void main(String[] args) {
        String str = "fgiufg134yg3u4gr1g3rg14r";    Pattern p = Pattern.compile("\\d+");
        Matcher m = p.matcher(str);    int start = 0, end = 0;
        while (m.find(end)) {
            start = m.start();
            end = m.end();
        }    System.out.println(str.substring(start, end));
    }可能有更简便的方法吧。
      

  2.   

    public class Test {
        
        public static void main(String[] args) throws Exception {
    print("afsafa2as3434f3434dafsdf4");
    print("adfjsdl3434adfjl;afds234fasdf3344adsf");
        }

    public static void print(String s) {
    boolean hasDigit = false;
    StringBuffer sb = new StringBuffer(s);
    StringBuffer result = new StringBuffer();
    for (int i = sb.length() - 1; i >= 0; i--) {
    if (Character.isDigit(sb.charAt(i))) {
    result.insert(0, sb.charAt(i));
    hasDigit = true;
    }
    else if (hasDigit) break;
    }
    System.out.println (result);
    }
    }
      

  3.   

    //这样就可以了啊
    public class TestEnd {
    public static void main(String[] args) {
    String s="afsafa2as3434f3434dafsdf4";
    String[] result=s.split("[^\\d+]");//按非数字拆分字符串
    System.out.println(result[result.length-1]);
    }
    }
      

  4.   

    //这样就可以了
    public class TestEnd {
    public static void main(String[] args) {
    String s="afsafa2as3434f3434dafsdf4";
    String[] result=s.split("[^\\d+]");//按非数字拆分字符串
    System.out.println(result[result.length-1]);
    }
    }
      

  5.   


    public static int method(String str) {
    if (null == str) return -1;
    final Pattern p = Pattern.compile("(\\d+)\\D*$");
    Matcher matcher = p.matcher(str);
    if (!matcher.find()) return -1; // 找不到数字
    return Integer.parseInt(matcher.group(1));
    }
      

  6.   

    我想的方法是用StringBuffer的reverse()逆序后,遍历判断输出。
      

  7.   

    有了这么多好办法,我写一个土一点的:
    public class StringLast {
    public static void main(String[] args) {
        String str = "111";
        int count = 0;
        
        for (int i=str.length()-1; i>=0; i--){
         char c = str.charAt(i);      if (c >= '0' && c <= '9'){
         count ++;
         }
    if (count == 0 && i == 0)
    System.out.printf("There is no Number char in \"%s\".", str);  //应付没有数字的字符串

         if (count != 0){
         if (c < '0' || c > '9'){
         System.out.print(str.substring(i+1, i+count+1));   //应付结尾或者中间有数字的字符串 
         return;
         }
         else if (i == 0){
         if (count == str.length()){
         System.out.print(str); //应付全是数字的字符串
         return;
         }
         else{
         System.out.print(str.substring(0, count)); //应付只有开始几个是数字的字符串
         return;
         }
         }    
         }
        }    
    }
    }
      

  8.   

    我也来一个:
    import java.util.regex.*;
    public class MyRegex2 {
    public static void main(String[] args) {
    String s="adfjsdl3434adfjl;afds234fasdf3344adsf";
    Matcher m=Pattern.compile(".*\\D+(\\d+)\\D*$").matcher(s);
    if(m.find()){
    System.out.println(m.group(1));
    }
    }
    }
      

  9.   

    刚才又想了下如果碰到"sdfsdf234sdf"上面的好像不行如果全部都是数字的话那就应该输出本身:
    改了下:
    import java.util.regex.*;
    public class MyRegex2 {
    public static void main(String[] args) {
    String s="sdf234234334444dfdd23f";
    Matcher m=Pattern.compile("\\D*(\\d+)\\D*$").matcher(s);
    if(m.find()){
    System.out.println(m.group(1));
    }
    }
    }
      

  10.   

    public class TestEnd { 
    public static void main(String[] args) { 
    String s="afsafa2as3434f3434dafsdf4"; 
    String[] result=s.split("[^\\d+]");//按非数字拆分字符串 
    System.out.println(result[result.length-1]); 


    这个就不错
      

  11.   

    答:参考代码:public static String method(String s)
    {
    Pattern p=Pattern.compile(".*?(\\d+)[^\\d]*$");
    Matcher m=p.matcher(s);
    return m.find()?m.group(1):null;
    }
      

  12.   

    我也来个土方法  ^_^public class Test4 {
            
        public static void main(String[] args) {
            String str = "adfjsdl3434adfjl;afds234fasdf3344adsf";
            System.out.println(getLastNumber(str));
        }    public static String getLastNumber(String str) {
            if(str == null || str.length() == 0) {
                return null;
            }
            char[] chs = str.toCharArray();
            int offset = 0;
            boolean isNonNumberStart = false;
            for(int i = 0; i < chs.length; i++) {
                if(!isNumber(chs[i])) {
                    isNonNumberStart = true;
                    continue;
                }
                if(isNonNumberStart) {
                    isNonNumberStart = false;
                    offset = 0;
                }
                chs[offset++] = chs[i];
            }
            return new String(chs, 0, offset);
        }
        
        private static boolean isNumber(char c) {
            return (c >= '0') && (c <= '9');
        }
    }
      

  13.   

    匹配第一个出现的数字
      "^.*?(?<!\\d)(\\d+)(?!\\d+).*$"
    匹配最后一个出现的数字
      "^.*(?<!\\d)(\\d+)(?!\\d+).*$"测试过,没有问题滴。
      

  14.   

    不好意思,稍微修正一下匹配第一个出现的数字
      "^.*?(? <!\\d)(\\d+)(?!\\d).*$"
    匹配最后一个出现的数字
      "^.*(? <!\\d)(\\d+)(?!\\d).*$"
      

  15.   

    自己实现的一个...用的是包装类public class text10 { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub

    String s=f("adfjsdl3434adfjl;afds234fasdf3344adsf");

    StringBuffer sb=new StringBuffer(s);


    System.out.println(sb.reverse());

    }






    public static String f(String s)
    {
    String str="";
    for(int i=s.length()-1;i>-1;i--)
    { char c1=s.charAt(i);
    char c2=s.charAt(i-1);
    //将char封装成character
    Character ch1=Character.valueOf(c1);
    Character ch2=Character.valueOf(c2);

    //如果不是数字
    if(!ch1.isDigit(c1))
    {

    }
    else if(ch1.isDigit(c1)&&!ch2.isDigit(c2))
    {
    str+=c1;
    return str;
    }
    else
    {
    str+=c1;
    }


    }
    return null;
    }

    }