1.求字符串中的整数和价乖:
例如:String s = "a1b1b3c";
(1+1+3)!=120.
PS:我会陆续把试题更新

解决方案 »

  1.   

    因为公司离我住的地方很远,要坐三个钟车到,不想去那公司上班,所以试题,我就不怎么做.又说很多是编程题,要我们手写,我很厌倦这种做法,手写不能查JDK文档,回来自己写了一个,写得太长了,也希望大家也写下,互相交流,试题我陆续F5
    ================================================================================
    package com.csdn;/**
     * @author xiaotang E-mail: [email protected]
     * @version1.00 创建时间:Apr 1, 2009 6:25:00 PM 类说明:
     */public class StringTest1 {
    /**
     * 用递归求价乖,是递归中的一个很简单的例子,就不说了.
     * 
     * @param n
     * @return
     */
    public static int getJiesheng(int n) {
    if (n == 1 || n == 0) {
    return 1;
    } return n * getJiesheng(n - 1);
    } /*
     * 求字符串中的数字和
     */
    public static int getSum(String s) {
    int a = 0;// 字符串中的其中一个整数
    int sum = 0;// 字符串中的整数和
    for (int i = 0; i < s.length(); i++) {// 篇历字符串
    String str = s.substring(i, i + 1);// 一个一个地按顺序截取字符串中的字符(包括整数和英文字符)
    for (int j = 0; j < 10; j++) {// 篇历0--9
    if (Integer.toString(j).equals(str)) {/*
     * 判断0--9和字符串中字符是否相等,因为equals()只能用对象做比较,
     * 所以整数转换成String,所以用到Integer.toString(j)
     */
    a = new Integer(str).intValue();// 再次String(str)类型转换成int
    sum += a;
    }
    }
    }
    return sum;
    } public static void main(String[] args) {
    // TODO Auto-generated method stub
    String s = "a1b1b3c";
    int i = StringTest1.getSum(s);
    System.out.println("字符串中的整数和是:"+i);
    int b = StringTest1.getJiesheng(i);
    System.out.println("价乖是:"+b);
    // System.out.println(s.substring(0)); }}
      

  2.   

    public class Main { public static void main(String[] args)
     {
      String str = "abc345def";
      int i = getIntValue(str);
      System.out.println(str+"->"+i);
       }
     
     /**
      * 解析str,获得其中的整数
      * @param str
      * @return
      */
     private static int getIntValue(String str)
     {
      int r = 0;
      if(str!=null && str.length()!=0)
      {
       StringBuffer bf = new StringBuffer();
       
       char[] chars = str.toCharArray();
       for(int i=0;i<chars.length;i++)
       {
        char c = chars[i];   
        if(c>='0' && c<='9')
        {
         bf.append(c);
        }
        else if(c==',')
        {
         continue;
        }
        else
        {
         if(bf.length()!=0)
         {
          break;
         }
        }
       }
       try
       {
        r = Integer.parseInt(bf.toString());
       }
       catch(Exception e)
       {}
      }
      return r;
     }
      

  3.   


    package 面试题;/**
     * 1.求字符串中的整数和价乖: 例如:String s = "a1b1b3c"; (1+1+3)!=120.
     * 
     * @author 苏帅 Apr 1, 20098:08:41 PM
     * 
     */
    public class Test {
    /**
     * 得到字符串中的整数
     * 
     * @returnint
     */
    public int getInt(String str) {
    int plus = 0;
    for (int i = 0; i < str.length(); i++) {
    if (Character.isDigit(str.charAt(i))) {
    plus = plus + Integer.parseInt(String.valueOf(str.charAt(i)));
    }
    }
    return plus;
    }
    /**
     * 求阶乘,递归,不是很完善
     * @param m
     * @returnLong
     */
    public Long getJiecheng(int m){
    if(m == 1 || m == 0){
    return 1l;
    } else {
    return m * getJiecheng(m - 1);
    }

    }

    public static void main(String[] args) {
    Test test = new Test();
    String s = "a1b1b3c";
    System.out.println(test.getJiecheng(test.getInt(s)));
    }
    }
      

  4.   

    三楼的,你怎么返回是345,我改了下:
    ==============================================================================package com.csdn;/**
     * @author xiaotang E-mail: [email protected]
     * @version1.00 创建时间:Apr 1, 2009 8:23:20 PM 类说明:
     */public class Main {
    public static void main(String[] args) {
    String str = "a7655b333cd3ef";
    int i = getIntValue(str);
    System.out.println(str + "->" + i);
    } /**
     * 解析str,获得其中的整数
     * 
     * @param str
     * @return
     */
    private static int getIntValue(String str) {
    int r = 0;
    int sum=0;
    if (str != null && str.length() != 0) {
    StringBuffer bf = new StringBuffer(); char[] chars = str.toCharArray();
    for (int i = 0; i < chars.length; i++) {
    char c = chars[i];
    if (c >= '0' && c <= '9') {/*其实我刚开发是和你一样的想法的,我不知道char可以这样
    c >= '0' && c <= '9'用的,见识了.*/ 
    sum+=Integer.parseInt(Character.toString(chars[i]));

    }
    }

    }
    return sum; }
    }
      

  5.   


    public class Factorial { public static int f(int n){
    if(n==1){
    return 1;
    }
    return n*f(n-1);
    }
    public static void main(String[] args) {
    String s = "k2kj1iiiiii4iii";
    String[] str = s.split("[a-zA-Z]++");
    int sum = 0;
    for(String i:str){
    if(!"".equals(i)){
    sum = sum+Integer.parseInt(i);
    }
    }
    System.out.println(Factorial.f(sum));
    }}
      

  6.   

    又见识5楼了,5楼更快,为什么我看JDK文档时,没有看到该方法呢~~~
      

  7.   

    just up!
    5楼7楼方法独特!
    学习!
      

  8.   


    这种递归的算法效率不高,更重要的一点:当计算的一个稍大的数的阶乘就不行了!不妨把String s = "k2kj1iiiiii4iii";替换成String s = "k2008kj1iiiiii4iii";试试!
      

  9.   

    public static void main(String[] args) {
    String s1 = "a1b1b3c";
    String[] s2 = s1.split("[^0-9]");
    int sum = 0;
    for (String b : s2) {
    b = "".equals(b) ? "0" : b;
    sum += Integer.parseInt(b);
    }
    System.out.println(a(sum));
    }

    public static int a(int i){
    return i == 0 ? 1 : i * a(i - 1);
    }     测试结果:120
      

  10.   

    public class NewClass {    public static void main(String args[]) {
            String a = "efgehej23423ghsdkfhg12";
            a = a.replaceAll("[a-zA-z]", "");
            String as[] = a.split("");
            int sum = 0;
            for (int i = 0; i < as.length; i++) {
                sum += as[i].equals("") ? 0 : Integer.parseInt(as[i]);
            }
            long aaaa = ex(sum);
            System.out.println(aaaa);
        }    public static long ex(int a) {
            return a != 0 ? a * ex(a - 1) : 1;
        }
    }
      

  11.   

    package com;public class JieCheng { /**
     * 计算字符串中各数字之和
     * @param s
     * @return
     */
    public int strInt(String s) {
    int sum = 0;
    int i = 0;
    char[] cArray = s.toCharArray();

    for(char c:cArray) {
    if (c > '0' && c <= '9') {
    i = c - 48;
    sum += i; 
    }
    }

    return sum;
    }

    /**
     * 计算阶乘
     * @param n
     * @return
     */
    public long jieCheng(int n) {
    if ( (0 == n) || (1 == n) ) {
    return 1;
    } else {
    return n * jieCheng(n - 1);
    }
    }

    public static void main(String[] args) {
    String s = "a1b1b3c"; 
    int n = 0;

    JieCheng jieCheng = new JieCheng();
    n = jieCheng.strInt(s);

    System.out.println(s + "中数字之和的阶乘是" + jieCheng.jieCheng(n));
    }}偶做的。
      

  12.   

    public class Aaa {
    public static void main(String[] args) {
    Aaa a1=new Aaa();
    String st="asd1ad212asd1";
    System.out.println("字符串中数字和:"+a1.getNum(st));
    System.out.println("字符串中数字和的阶乘:"+a1.getJc(a1.getNum(st)));
    }

    public int getNum(String str){
    int num=0;
    char[] c=str.toCharArray();
    for(int i=0;i<c.length;i++){
    if(Character.isDigit(c[i])){
    num=num+Integer.parseInt(String.valueOf(c[i]));
    }
    }
    return num;
    }
    public int getJc(int n){
    int num=1;
    if(n==1||n==0){
    return n;
    }
    for(int i=1;i<=n;i++){
    num=num*i;
    }
    return num;
    }
    }
      

  13.   

    public class Aaa {
    public static void main(String[] args) {
    Aaa a1=new Aaa();
    String st="asd1ad212asd1";
    System.out.println("字符串中数字和:"+a1.getNum(st));
    System.out.println("字符串中数字和的阶乘:"+a1.getJc(a1.getNum(st)));
    }

    public int getNum(String str){
    int num=0;
    char[] c=str.toCharArray();
    for(int i=0;i<c.length;i++){
    if(Character.isDigit(c[i])){
    num=num+Integer.parseInt(String.valueOf(c[i]));
    }
    }
    return num;
    }
    public int getJc(int n){
    int num=1;
    if(n==1||n==0){
    return n;
    }
    for(int i=1;i<=n;i++){
    num=num*i;
    }
    return num;
    }
    }
      

  14.   

    public class Aaa { /**
     * @param args
     */
    public static void main(String[] args) {
    Aaa a1=new Aaa();
    String st="asd1ad212asd1";
    System.out.println("字符串中数字和:"+a1.getNum(st));
    System.out.println("字符串中数字和的阶乘:"+a1.getJc(a1.getNum(st)));
    }

    public int getNum(String str){
    int num=0;
    char[] c=str.toCharArray();
    for(int i=0;i<c.length;i++){
    if(Character.isDigit(c[i])){
    num=num+Integer.parseInt(String.valueOf(c[i]));
    }
    }
    return num;
    }
    public int getJc(int n){
    int num=1;
    if(n==1||n==0){
    return n;
    }
    for(int i=1;i<=n;i++){
    num=num*i;
    }
    return num;
    }
    }
      

  15.   

    用split方法,存到一个String数组中,然后就是遍历,转换,相加,求阶乘。
      

  16.   

    这应该是目前最好的...public class Network2 { public static void main(String args[]) {
                    //这样的字符串
    String a = "!(a@1#b$)-1%b^3&c*";
    a = a.replaceAll("[^\\d]", "");
    String as[] = a.split("");
    System.out.println(a+"   "+a.length());
    int sum = 0;
    for (int i = 0; i < as.length; i++) {
    sum += as[i].equals("") ? 0 : Integer.parseInt(as[i]);
    }
    long aaaa = ex(sum);
    System.out.println(aaaa);
    } public static long ex(int a) {
    return a != 0 ? a * ex(a - 1) : 1;
    }}
      

  17.   

    replaceAll当数据太大时,效率不行吧。,顶5楼