如果字符串内部有数字,则将数字平方并作为字符串返回我如何用平方数替换旧数字 Java

问题描述

所以它应该像那样工作

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 "";
        }
    }

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

解决方法

您可以使用 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();
    }
,

您可以像这样使用 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);
}
,

也试试。

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;
    }
}
,

纯函数方式(可能不是最佳方式):

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);
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...