【问题标题】:If the String has number inside then square the number and return as a String. How do i replace old number with the squared number Java如果字符串内部有数字,则将数字平方并作为字符串返回。我如何用平方数Java替换旧数字
【发布时间】:2021-02-11 10:25:07
【问题描述】:

所以它应该像那样工作

squareDigits("a22b") on "a44b"

squareDigits("a9b2") on "a81b4"

到目前为止我得到了什么:

public class Code {
    public static void main(String[] args) {
        String ok = "a2b9";
        System.out.println(squareDigits(ok)); // "a81b4"
    }

  public static String squareDigits(String s) {
        char[] pena = s.toCharArray();
        int aboba;
        for (char c : pena) {
            if (Character.isDigit(c)) {
                String s1 = Character.toString(c);
                int b = Integer.parseInt(s1);
                aboba = b * b;
                System.out.println(aboba);
            }
        }
        return "";
        }
    }

我只是初学者,这对我很有帮助

【问题讨论】:

  • 为什么会是这样的结果?据我所知:22*22 不是 44
  • 我建议查看String 类中的可用方法,有一些可能会有所帮助,具体取决于您想采用的方法,也许是replace 方法之一?
  • @Stultuske 大概是 2*2 与 2*2 连接。
  • 您的问题是只考虑单个字母数字还是多个数字?您能否提供更多示例测试用例,以便我们更好地理解问题?
  • @Joe这个我很清楚,但是22也是一个数字,所以按照他的解释,应该不是2和2,而是22

标签: java string replace digits


【解决方案1】:

也试试。

public static void main(String[] args) {
    String ok = "a2b9";
    System.out.println(squareDigits(ok)); // "a81b4"
}

public static String squareDigits(String s) {
    StringBuilder sb = new StringBuilder();
    String[] chars = s.split("");
    for (String str : chars){
        if (isNumber(str)){
            int num = Integer.valueOf(str);
            Double square = Math.pow(num, 2);
            sb.append(square.intValue());
        } else {
            sb.append(str);
        }
    }
    return sb.toString();
}

private static boolean isNumber(String str) {
    try {
        Integer.valueOf(str);
        return true;
    } catch (Exception e) {
        return false;
    }
}

【讨论】:

    【解决方案2】:

    您可以使用StringBuffer 并遍历 char 数组并检查 char 是否为数字,然后将其平方并放入字符串缓冲区,如果不是,则将其放入字符串缓冲区中。

         public static void main(String[] args) {
            System.out.println(squareDigits("a22b"));
            System.out.println(squareDigits("a9b2"));
        }
    
        public static String squareDigits(String s) {
            char[] pena = s.toCharArray();
            StringBuffer sb = new StringBuffer();
            for (char c : pena) {
                if (Character.isDigit(c)) {
                    String s1 = Character.toString(c);
                    int b = Integer.parseInt(s1);
                    sb.append(b * b);
                } else {
                    sb.append(c);
                }
            }
            return sb.toString();
        }
    

    【讨论】:

      【解决方案3】:

      您可以像这样使用StringBuilder 轻松做到这一点:

      public static void main(String[] args) {
          System.out.println(squareDigits("a22b")); // "a44b"
          System.out.println(squareDigits("a2b9")); // "a4b81"
          System.out.println(squareDigits("a55b")); // "a2525b"
      }
      
      public static String squareDigits(String s) {
          StringBuilder result = new StringBuilder();
          s.chars().forEach(c -> result.append(addDigitSquaredIfDigit(c)));
      
          return result.toString();
      }
      
      private static String addDigitSquaredIfDigit(int charAsDigit) {
          char c = (char) charAsDigit;
          return Character.isDigit(c) ? getSquaredDigitString(c) : String.valueOf(c);
      }
      
      private static String getSquaredDigitString(char c) {
          int digit = Integer.parseInt(Character.toString(c));
      
          return Integer.toString(digit * digit);
      }
      

      【讨论】:

        【解决方案4】:

        一种纯粹的功能方式(可能不是最优化的方式):

        public static String squareDigits(String s) {
              char[] pena = s.toCharArray();
              return IntStream.range(0, pena.length).mapToObj(i -> pena[i]).map(it -> {
                String c = it.toString();
                try {
                  int intVal = Integer.parseInt(c);
                  return "" + (intVal * intVal);
                } catch (Exception e) {
                  return c;
                }
              }).reduce("", String::concat);
        }
        

        【讨论】:

          猜你喜欢
          • 2022-11-12
          • 1970-01-01
          • 2013-12-11
          • 2014-10-30
          • 2022-08-03
          • 2015-06-28
          • 2012-10-27
          • 2013-11-08
          • 2021-02-11
          相关资源
          最近更新 更多