我试图解决Java的codingBat中的以下问题:
http://codingbat.com/prob/p121193
给定一个字符串,返回出现在字符串中的数字的总和,忽略所有其他字符。数字是连续的一系列1个或多个数字字符。 (注意:Character.isDigit(char)测试字符是否为字符“ 0”,“ 1”,..“ 9”之一。Integer.parseInt(string)将字符串转换为int。)
sumNumbers(“ abc123xyz”)→123
sumNumbers(“ aa11b33”)→44
sumNumbers(“ 7 11”)→18
下面是我的解决方案
public int sumNumbers(String str) {
final int len=str.length();
int[] numbers=new int[len];
int count=0;
String temp="";
int sum=0;
for(int i=0;i<len;i++)
{
if(Character.isDigit(str.charAt(i)))
{
temp=temp+str.substring(i, i+1);
if(i==len-1)
{
numbers[count]=Integer.parseInt(temp);
break;
}
if(Character.isDigit(str.charAt(i+1)))
{
continue;
}
else
{
numbers[count]=Integer.parseInt(temp);
count++;
temp="";
}
}
}
for(int j=0;j<numbers.length;j++)
{
sum=sum+numbers[j];
}
return sum;
}
这是一个简单的问题,请使用正则表达式或其他方式提供任何有效的替代答案,请不要使用任何收藏框架中的内容。
最佳答案
这是我的解决方案。与您的相似。
public int sumNumbers(String str) {
int sPos = -1;
int ePos = -1;
int sum = 0;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (Character.isDigit(c)) {
if (sPos < 0) {
sPos = i;
ePos = i;
} else {
ePos = i;
}
} else {
sum = add(str, sum, sPos, ePos);
sPos = -1;
}
}
sum = add(str, sum, sPos, ePos);
return sum;
}
private int add(String str, int sum, int sPos, int ePos) {
if (sPos >= 0) {
sum += Integer.parseInt(str.substring(sPos, ePos + 1));
}
return sum;
}
关于java - 备用CodingBat sumNumbers练习解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20300671/