Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中,如何从包含数字和字母的序列中添加数字?_Java_For Loop_Substring - Fatal编程技术网

在java中,如何从包含数字和字母的序列中添加数字?

在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

假设用户提交这个序列: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.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);