如何从 java 中包含数字和字母的序列中添加数字?
How to add numbers from a sequence that contains numbers and letters in java?
假设用户提交了这个序列:dadeer50dfder625dsf3,程序应该打印数字总和的结果:50+625+3。我该怎么做?
这是我到目前为止所做的,但它不起作用。有人可以帮我吗:( :
String secuencia = JOptionPane.showInputDialog("Ingresa tu secuencia");
int par = secuencia.length();
int sumatoria = 0;
int sumatoria1 = 0;
for (int i = 0; i < par; i++) {
String p = secuencia.substring(i, i +1);
if(p.equals("1") || p.equals("2") || p.equals("3") || p.equals("4") || p.equals("5") || p.equals("6") || p.equals("7") || p.equals("8") || p.equals("9") || p.equals("0")){
for (int j = i + 1; j < par; j++) {
String n = secuencia.substring(j, j + 1);
if(n.equals("1") || n.equals("2") || n.equals("3") || n.equals("4") || n.equals("5") || n.equals("6") || n.equals("7") || n.equals("8") || n.equals("9") || n.equals("0")){
int v = Integer.parseInt(p);
int y = Integer.parseInt(n);
sumatoria += v;
sumatoria1 += y ;
} }}
System.out.print(sumatoria);
System.out.println(sumatoria1);
罗伯托,
看起来您的方向是正确的,但是您的代码的问题在于它假设数字只有一个字符长。我认为它添加了 5+0+6+2+5+3 而不是所需的添加。
我建议使用函数 String.split() 来分离包含数字的部分和不包含数字的部分。我相信你可以传递类似 [A-Za-z] 的东西,这将 return 只包含数字的字符串(假设只使用字母而不使用其他字符)。
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)
您可以 String.split(String)
,它采用正则表达式。我想你想要非数字,所以你可以使用 \D+
。像,
String str = "dadeer50dfder625dsf3";
String[] arr = str.split("\D+");
int total = 0;
StringBuilder sb = new StringBuilder();
for (String val : arr) {
if (val.isEmpty()) {
continue;
}
sb.append(val).append(" + ");
total += Integer.parseInt(val);
}
sb.replace(sb.length() - 2, sb.length(), "= ");
System.out.print(sb);
System.out.println(total);
输出为
50 + 625 + 3 = 678
这是一个简单的代码,没有像您在评论中告诉我们的那样使用 RegEx:
public static void main(String[] args) {
String str = "55blhalhalh3265hezubf565";
boolean isLetter = false;
String temp = "";
int sum = 0;
for (int i = 0 ; i < str.length() ; i++){
switch(str.charAt(i)){
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
isLetter = false;
temp += str.charAt(i);
break;
default :
if (!isLetter)sum += Integer.parseInt(temp);
isLetter = true;
temp = "";
break;
}
}
if (!isLetter) sum += Integer.parseInt(temp);
System.out.println("The final sum is " + sum);
}
我特意把开关设置的很长,这样就很清楚了。
一点解释:
for
当然会遍历 String
对象的所有字符。
然后,switch
检查它是否是一个数字:
如果是这种情况,则布尔值 isLetter 取假值,如果有
,我们将字符连接到前一个数字
如果是字母,我们把已经找到的数字加到总和上
这里有两个版本。
第一个显示使用正则表达式是多么容易。
第二个使用注释中给出的约束。既然它说 "substring",我会假设使用 Integer.parseInt()
是可以的。
// Using regular expression
String text = "dadeer50dfder625dsf3";
int sum = 0;
for (Matcher m = Pattern.compile("\d+").matcher(text); m.find(); )
sum += Integer.parseInt(m.group());
System.out.println(sum);
// Using only substring, for loops and length
String text = "dadeer50dfder625dsf3";
int sum = 0, numStart = -1;
for (int i = 0; i < text.length(); i++) {
char c = text.charAt(i);
if (c >= '0' && c <= '9') {
if (numStart == -1)
numStart = i;
} else {
if (numStart != -1)
sum += Integer.parseInt(text.substring(numStart, i));
numStart = -1;
}
}
if (numStart != -1)
sum += Integer.parseInt(text.substring(numStart));
System.out.println(sum);
两者的输出
678
String str = "dadeer50dfder625dsf3";
List<String> list = Arrays.asList(str.split("\D+"));
int sum = 0;
for (String each : list) {
try {
sum += Integer.parseInt(each);
} catch (Exception e) {
// TODO: handle exception
}
}
System.out.println(sum);
假设用户提交了这个序列:dadeer50dfder625dsf3,程序应该打印数字总和的结果:50+625+3。我该怎么做?
这是我到目前为止所做的,但它不起作用。有人可以帮我吗:( :
String secuencia = JOptionPane.showInputDialog("Ingresa tu secuencia");
int par = secuencia.length();
int sumatoria = 0;
int sumatoria1 = 0;
for (int i = 0; i < par; i++) {
String p = secuencia.substring(i, i +1);
if(p.equals("1") || p.equals("2") || p.equals("3") || p.equals("4") || p.equals("5") || p.equals("6") || p.equals("7") || p.equals("8") || p.equals("9") || p.equals("0")){
for (int j = i + 1; j < par; j++) {
String n = secuencia.substring(j, j + 1);
if(n.equals("1") || n.equals("2") || n.equals("3") || n.equals("4") || n.equals("5") || n.equals("6") || n.equals("7") || n.equals("8") || n.equals("9") || n.equals("0")){
int v = Integer.parseInt(p);
int y = Integer.parseInt(n);
sumatoria += v;
sumatoria1 += y ;
} }}
System.out.print(sumatoria);
System.out.println(sumatoria1);
罗伯托,
看起来您的方向是正确的,但是您的代码的问题在于它假设数字只有一个字符长。我认为它添加了 5+0+6+2+5+3 而不是所需的添加。
我建议使用函数 String.split() 来分离包含数字的部分和不包含数字的部分。我相信你可以传递类似 [A-Za-z] 的东西,这将 return 只包含数字的字符串(假设只使用字母而不使用其他字符)。 http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)
您可以 String.split(String)
,它采用正则表达式。我想你想要非数字,所以你可以使用 \D+
。像,
String str = "dadeer50dfder625dsf3";
String[] arr = str.split("\D+");
int total = 0;
StringBuilder sb = new StringBuilder();
for (String val : arr) {
if (val.isEmpty()) {
continue;
}
sb.append(val).append(" + ");
total += Integer.parseInt(val);
}
sb.replace(sb.length() - 2, sb.length(), "= ");
System.out.print(sb);
System.out.println(total);
输出为
50 + 625 + 3 = 678
这是一个简单的代码,没有像您在评论中告诉我们的那样使用 RegEx:
public static void main(String[] args) {
String str = "55blhalhalh3265hezubf565";
boolean isLetter = false;
String temp = "";
int sum = 0;
for (int i = 0 ; i < str.length() ; i++){
switch(str.charAt(i)){
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
isLetter = false;
temp += str.charAt(i);
break;
default :
if (!isLetter)sum += Integer.parseInt(temp);
isLetter = true;
temp = "";
break;
}
}
if (!isLetter) sum += Integer.parseInt(temp);
System.out.println("The final sum is " + sum);
}
我特意把开关设置的很长,这样就很清楚了。
一点解释:
for
当然会遍历 String
对象的所有字符。
然后,switch
检查它是否是一个数字:
如果是这种情况,则布尔值 isLetter 取假值,如果有
,我们将字符连接到前一个数字
如果是字母,我们把已经找到的数字加到总和上
这里有两个版本。
第一个显示使用正则表达式是多么容易。
第二个使用注释中给出的约束。既然它说 "substring",我会假设使用 Integer.parseInt()
是可以的。
// Using regular expression
String text = "dadeer50dfder625dsf3";
int sum = 0;
for (Matcher m = Pattern.compile("\d+").matcher(text); m.find(); )
sum += Integer.parseInt(m.group());
System.out.println(sum);
// Using only substring, for loops and length
String text = "dadeer50dfder625dsf3";
int sum = 0, numStart = -1;
for (int i = 0; i < text.length(); i++) {
char c = text.charAt(i);
if (c >= '0' && c <= '9') {
if (numStart == -1)
numStart = i;
} else {
if (numStart != -1)
sum += Integer.parseInt(text.substring(numStart, i));
numStart = -1;
}
}
if (numStart != -1)
sum += Integer.parseInt(text.substring(numStart));
System.out.println(sum);
两者的输出
678
String str = "dadeer50dfder625dsf3";
List<String> list = Arrays.asList(str.split("\D+"));
int sum = 0;
for (String each : list) {
try {
sum += Integer.parseInt(each);
} catch (Exception e) {
// TODO: handle exception
}
}
System.out.println(sum);