如何将字符串中的char和num分开并打印num重复的char

时间:2019-05-06 12:04:19

标签: java

写一个Java程序来打印这样的输出

输入:d3f4cf5
输出dddffffcfcfcfcfcf

 for(int i=0; i<str.length();i++)
        {
            if(Character.isDigit(str.charAt(i)))
            {r = str.charAt(i);
                for(r=1;r<=i;r++) {
                System.out.println(str.substring(t, i));
                t = ++i;
                 }
            }
            if (i==str.length()-1) {
                for (r = 1; r <= i; r++) {
                    System.out.println(str.substring(t));
                }
            }
        }

2 个答案:

答案 0 :(得分:0)

好吧,正如Ronald建议的那样,您可以拆分字符串并在数组上运行。

有关如何拆分的信息,请点击此处:Java - Split String by Number and Letters

让我们假设只有数组["d","3","f","4","cf","5"]。然后,您可以执行以下操作:

for( int i = 0; i < array.length; i += 2 ) {
  String letters = array[i];
  int count = Integer.parseInt( array[i + 1] );

  //loop and print here
}

请注意,这始终希望字符串以至少一个字母开头并以数字结尾。如果不是,则必须显式地处理该问题,即,如果第一个数字以数字开头(则可以仅通过“打印”一个空字符串n次来完成)并假定计数,则不要打印任何内容如果输入以字母结尾,则为1。

如果由于某种原因不能使用正则表达式,则可以在遍历字符串的字符时也使用正则表达式。然后,您可以结合使用以下步骤:

  1. 如果字符是字母,则说明您处于字符串构建模式。您将字符添加到temporay字符串。最初,该临时字符串为空。
  2. 如果字符是数字,则说明您处于计数模式。您将数字添加到临时计数器(如果要支持多个数字,请先将其乘以10)。计数器最初的值为0。
  3. 从计数模式切换到字符串构建模式时,将按计数的频率打印当前临时字符串,然后将计数器重置为0,并将临时字符串重置为空(""),然后重复步骤1 (您将当前字符添加到临时字符串)。
  4. 当您敲击输入的末尾时,您将执行与步骤3相同的操作。如果您需要支持以字母结尾的输入,您可能希望假设计数为1,因此在执行步骤3之前,请先设置计数器(仍应为0)到1。

答案 1 :(得分:0)

如果您的输入格式正确,则应执行以下操作:

public static void main(String[] args){
    String input = "d3f4cf5";
    System.out.println(uncompress(input));
}

private static String uncompress(String input) {
    //Split input at each number and keep the numbers
    // for the given input this produces [d3, f4, cf5]
    String[] parts = input.split("(?<=\\d+)");            
    StringBuilder sb = new StringBuilder();
    for(String str : parts){
       // remove letters to get the number
       int n    = Integer.parseInt(str.replaceAll("[^0-9]", ""));
       // remove numbers to get the letters
       String s = str.replaceAll("[0-9]", "");
       // append n copies of string to sb
       sb.append(String.join("", Collections.nCopies(n, s)));
    }        
    return sb.toString();
}