在java中,如何从包含数字和字母的序列中添加数字?
假设用户提交这个序列:dadeer50dfder625dsf3,程序应该打印数字之和的结果:50+625+3。我该怎么做 这是我到目前为止所做的,但它不起作用。有人能帮我吗在java中,如何从包含数字和字母的序列中添加数字?,java,for-loop,substring,Java,For Loop,Substring,假设用户提交这个序列:dadeer50dfder625dsf3,程序应该打印数字之和的结果:50+625+3。我该怎么做 这是我到目前为止所做的,但它不起作用。有人能帮我吗 String secuencia=JOptionPane.showInputDialog(“Ingrea tu secuencia”); int PAR=SeCuNCIA.LINTHOST(); 国际苏门答腊岛=0; 国际疗养院1=0; 对于(int i=0;i<PAR;i++){ 字符串p=secuencia.substr
String secuencia=JOptionPane.showInputDialog(“Ingrea tu secuencia”);
int PAR=SeCuNCIA.LINTHOST();
国际苏门答腊岛=0;
国际疗养院1=0;
对于(int i=0;i<PAR;i++){
字符串p=secuencia.substring(i,i+1);
如果(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”)){
对于(int j=i+1;j<PAR;j++){
字符串n=secuencia.子字符串(j,j+1);
如果(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=整数.parseInt(p);
int y=Integer.parseInt(n);
苏门答腊岛+=v;
苏门答腊1+=y;
} }}
系统输出打印(苏门答腊);
系统输出打印(sumatoria1);
罗伯托
看起来您走的路是对的,但是代码的问题是它假设数字只有一个字符长。我认为它添加了5+0+6+2+5+3,而不是所需的添加
我建议使用函数String.split()来区分包含数字的片段和不包含数字的片段。我相信您可以传递类似[A-Za-z]的内容,这将返回只包含数字的字符串(假设只使用字母而不使用其他字符)。
你可以,它需要一个正则表达式。我想你需要非数字,所以你可以使用\\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
下面是一个不使用正则表达式的简单代码,正如您在评论中告诉我们的:
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);
}
publicstaticvoidmain(字符串[]args){
String str=“55blhalh3265hezubf565”;
布尔值=假;
字符串temp=“”;
整数和=0;
对于(int i=0;i
我故意把开关拨长了,以便说得很清楚
一点解释:
当然,的会迭代字符串
对象的所有字符。
然后,开关检查它是否是一个数字:
- 如果是这种情况,则布尔值Isleter接受假值,如果有,我们将字符连接到前一个数字
- 如果它是一个字母,我们将已经找到的数字加到总数中
这里有两个版本。
第一个例子说明了使用正则表达式是多么容易。
第二个使用注释中给出的约束。因为它说的是“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);
String str=“dadeer50dfder625dsf3”;
List List=Arrays.asList(str.split(\\D+));
整数和=0;
for(每个字符串:列表){
试一试{
sum+=Integer.parseInt(每个);
}捕获(例外e){
//TODO:处理异常
}
}
系统输出打印项数(总和);
使用正则表达式可以很快完成任务。你可以使用它们吗?我不太确定你对正则表达式的意思(我只编写了大约一个月),我应该使用子字符串,用于循环和长度。好的,那么我有一个答案给你,我会在一分钟后发布。请准确描述它的用法“不工作”。你得到了一个例外吗?错误的答案(预期和实际输出是什么)?其他东西?例如,如果我写44,我得到44作为答案,如果我写444,我得到88,1212,1212这实际上帮助了问题,非常感谢你,也感谢所有其他人花时间帮助我。
// 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);