如果输入是a1bc2def3,则输出应为abcbcdefdef

时间:2016-06-07 15:12:36

标签: arrays string algorithm data-structures linked-list

如果给定的输入是a1bc2def3,那么输出应该是abcbcdefdefdef

每当数字到来时,我们应该多次重复前一个子字符串。

请提供算法或代码来完成此任务。

2 个答案:

答案 0 :(得分:1)

这是另一种不依赖于正则表达式的方法。

public String splitRepeat(String str)
{
  StringBuilder out = new StringBuilder();

  boolean number = false;
  for(int i=0,j=0,k=0; i<=str.length(); i++)
  {
    if(i==str.length() || Character.isDigit(str.charAt(i)) != number)
    {
      if(number)
      {
        for(int r = Integer.parseInt(str.substring(j, i)); r>0; r--)
        {
          out.append(str.substring(k, j));
        }
      }
      else 
      {
        k=j;
      }
      j=i;
      number = !number;
    }               
  }
  return out.toString();
}

答案 1 :(得分:0)

我的建议是:

  1. 尝试使用正则表达式,这样就可以得到一组数字和字符,
  2. 然后将数组的Parsable元素转换为整数
  3. 在该循环之后,使用数组索引追加n次数组字符
  4. 然后打印最终结果
  5. 实施例

    public static void main(String[] args) {
    String stringToProcess = "a1bc2def3";
    String[] regexSplitted = stringToProcess.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");
    StringBuilder sb = new StringBuilder();
    String appender = "";
    for (int i = 0; i < regexSplitted.length; i++) {
        try {
        int kilo = Integer.parseInt(regexSplitted[i]);
        for (int j = 0; j < kilo; j++) {
            sb.append(appender).append(regexSplitted[i - 1]);
            appender = "-";
        }
        } catch (NumberFormatException e) {
        }
    
    }
    System.out.println(sb.toString());
    }
    

    这将打印

      

    A-BC-BC-DEF-DEF-DEF

    这几乎就是你要找的东西。