【问题标题】:add 1 to all digits in string对字符串中的所有数字加 1
【发布时间】:2022-07-22 22:02:11
【问题描述】:

我正在处理字符串并解决问题。问题陈述是“将字符串内的所有数字加一”。对于输入数字 129 和 9923,我没有得到所需的输出。 谁能帮忙!

import java.util.*;
public class Increment {
  public static void main(String[] args) {
    String number = "129";
    int len = number.length();
    int i = 0;
    int temp = 0;
    int before = 0;
    int carry = 0;

    String result = number;
    for (i = len - 1; i >= 0; i--) {
      temp = Integer.parseInt(number.charAt(i) + "");
      if (temp >= 0 && temp < 9) {
        carry = 0;
        temp = temp + 1;
        result = result.replace(number.charAt(i), (char)(temp + '0'));
      } else {
        carry = 1;
        if (i != 0) {
          before = Integer.parseInt(number.charAt(i - 1) + "");
          before = before + 1;
          result = result.replace(number.charAt(i), '0');
          result = result.replace(number.charAt(i - 1), (char)(before + carry));
          i = i - 1;
        } else {
          result = result.replace(number.charAt(i), '0');
          result = "1" + result;
        }
      }
    }
    System.out.println(result);
  }
}

【问题讨论】:

  • 您可能想告诉我们您对这些案例的期望输出。 eG应该"129"导致"230""240""2310"或其他什么?
  • 240 因为对于数字 9,您将 1 添加两次和 10034。
  • 既然129 应该变成240 因为9+1=10 这意味着1 需要再次添加到2,那么为什么@987654330 @ 应该变成 10034 而不是 11034

标签: java string


【解决方案1】:

你定义了一个添加两个字符串的方法并调用该方法

public static String addStrings(String num1, String num2) {
  StringBuilder sb = new StringBuilder();

  int i = num1.length() - 1, j = num2.length() - 1;
  int carry = 0, sum = 0;
  while (i >= 0 || j >= 0) {
    sum = carry;

    if (i >= 0) sum += num1.charAt(i) - '0';
    if (j >= 0) sum += num2.charAt(j) - '0';

    sb.append(sum % 10);
    carry = sum / 10;
    i--;
    j--;
  }

  if (carry != 0) sb.append(carry);

  return sb.reverse().toString();
}

main

public static void main(String[] args) {
  String res1 = addStrings("129", "111");
  System.out.println(res1);
}

, 输出

240

【讨论】:

    【解决方案2】:

    我会使用正则表达式,它使它成为一个更简单的解决方案:

    public static void main(String[] args) {
        String text = "text240 moretext 350 evenmore460text";
        Pattern pattern = Pattern.compile("\\d+");
    
        Matcher matcher = pattern.matcher(text);
        while (matcher.find()) {
            String value = matcher.group();
            int val = Integer.parseInt(value) + 1;
            text = text.replace(value, Integer.toString(val));
        }
        System.out.println(text);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-15
      • 1970-01-01
      • 2014-03-23
      • 1970-01-01
      相关资源
      最近更新 更多