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))); } }
三楼的,你怎么返回是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; } }
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)); }}
又见识5楼了,5楼更快,为什么我看JDK文档时,没有看到该方法呢~~~
just up! 5楼7楼方法独特! 学习!
这种递归的算法效率不高,更重要的一点:当计算的一个稍大的数的阶乘就不行了!不妨把String s = "k2kj1iiiiii4iii";替换成String s = "k2008kj1iiiiii4iii";试试!
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
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; } }
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);
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; } }
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; } }
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; } }
用split方法,存到一个String数组中,然后就是遍历,转换,相加,求阶乘。
这应该是目前最好的...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; }}
================================================================================
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)); }}
{
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;
}
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)));
}
}
==============================================================================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; }
}
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));
}}
5楼7楼方法独特!
学习!
这种递归的算法效率不高,更重要的一点:当计算的一个稍大的数的阶乘就不行了!不妨把String s = "k2kj1iiiiii4iii";替换成String s = "k2008kj1iiiiii4iii";试试!
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
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;
}
}
* 计算字符串中各数字之和
* @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));
}}偶做的。
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;
}
}
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;
}
}
* @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;
}
}
//这样的字符串
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;
}}