有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将数字替换为空格数

我有一个字符串:

String example = "AA5DD2EE3MM";

我想用空格数替换这个数字。例如:

String example = "AA     DD  EE   MM"

如果字符串是

String anotherExample = "a3ee"

它应该变成:

String anotherExample = "a   ee"

我想做任何字符串。不仅仅是上面的例子


共 (5) 个答案

  1. # 1 楼答案

    使用模式匹配器方法:

    String input = "AA5DD2EE3MM";
    Pattern pattern = Pattern.compile("\\d+");
    Matcher m = pattern.matcher(input);
    StringBuffer buffer = new StringBuffer();
    
    while (m.find()) {
        m.appendReplacement(buffer,new String(new char[Integer.valueOf(m.group())]).replace("\0", " "));
    }
    m.appendTail(buffer);
    System.out.println(buffer.toString());  // AA     DD  EE   MM
    

    这里的想法是迭代字符串,在每个数字匹配处暂停。我们用复制次数与数字相同的空间替换每个数字

  2. # 2 楼答案

    将数字和非数字字符处的输入拆分为一个流,使用String.repeat将数字映射到相应的空格数,使用Collectors.joining()收集到字符串:

    String input  = "AA5DD2EE3MM";
    String regex  = "(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)";
    String result = Pattern.compile(regex)
                            .splitAsStream(input)
                            .map(s -> s.matches("\\d+") ? " ".repeat(Integer.parseInt(s)) : s)
                            .collect(Collectors.joining());
    
  3. # 3 楼答案

    StringBuilder对于串联更有效:

        public static String spaceIt(String s) {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < s.length(); i++) {
                char c = s.charAt(i);
                if (Character.isDigit(c)) {
                    for (int j = 0; j < Character.digit(c, 10); j++) {
                        sb.append(' ');
                    }
                } else {
                    sb.append(c);
                }
            }
            return sb.toString();
        }
    
  4. # 4 楼答案

    您也可以使用这种方法,这种方法更简单,但也不那么优雅:

    String example = "a4aa";
    String newString = "";
    
    for (int i = 0; i < example.length(); i++) {
        if (Character.isDigit(example.charAt(i))) {
            for (int a = 0; a < Character.getNumericValue(example.charAt(i)); a++) {
                newString += " ";
            }
        } else {
            newString += example.charAt(i);
        }
    }
    System.out.println(newString);
    
  5. # 5 楼答案

    public static String replaceDigitsWithSpaces(String input) {
        String result = "";
        int len = input.length(), i =0;
        
        while( i < len) {
            
            if(Character.isLetter(input.charAt(i))) {
                result += input.charAt(i);
            }else if(Character.isDigit(input.charAt(i))) {
                //generate number upto characters
                int k = 0, j = i;
                String temp = "";
                while(j < len) {
                    if(Character.isDigit(input.charAt(j))) {
                        temp += input.charAt(j);
                        j++;
                    }else {
                        break;
                    }
                }
                k = Integer.parseInt(temp);
                while(k != 0) {
                    result+= " ";
                    k--;
                }
                i = j;
                continue;
            }
            i++;
        }
        return result;
    }
    
    input:: "AA23BB1C11C8"<br>
    output:: AA                       BB C           C        .