【问题标题】:How to print sequence of characters according to the number next to it?如何根据旁边的数字打印字符序列?
【发布时间】:2020-11-09 14:12:56
【问题描述】:

输入:a2b4c3
输出:aabbbbccc

这是我的代码............输出错误:

import java.lang.*;
import java.util.ArrayList;

class hi
{
public static void main(String[] args)
{
String a="a2b4c3";
String alpha="";
ArrayList<Character> num=new ArrayList<Character>();
for(int i=0;i<a.length();i++)
{
  char c=a.charAt(i);
  if(Character.isDigit(c)==true)
   {
     num.add(c);
   }
  else
   {
    alpha+=c;
   }
}
for(int y=0; y<num.size(); y++)
 {
   for(int z=0; z<num.get(y); z++)
    { 
      System.out.print(alpha.charAt(y));
    }
  }
}
}

这段代码有什么问题,我没有得到预期的输出

我的输出是:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb ccccccccccccccccccccccccccccccccccccccccccccccccccccc

需要更正或 java 中的代码

【问题讨论】:

    标签: java string character sequence


    【解决方案1】:

    你考虑过这个吗?

    String input = "a2b4c3";
    
    for(String group : input.split("(?<=\\d++)")) {          
       System.out.print(group.substring(0,1).repeat(Integer.parseInt(group.substring(1))));
    }
    

    打印

    aabbbbccc
    

    它的工作原理如下:

    • (?&lt;=\\d++) 表示在一组数字之后的位置进行拆分
    • 然后只需使用substring 结合repeat 方法处理字符并将数字转换为int 以打印结果。

    【讨论】:

      【解决方案2】:

      你好,这里是你的答案。

      import java.lang.*;
      import java.util.ArrayList;
      
      class Hi
      {
          public static void main(String[] args)
          {
              String a="a2b4c3";
              String alpha="";
              ArrayList<Character> num=new ArrayList<Character>();
              for(int i=0;i<a.length();i++)
              {
                  char c=a.charAt(i);
                  if(Character.isDigit(c)==true)
                  {
                      num.add(c);
                  }
                  else
                  {
                      alpha+=c;
                  }
              }
              for(int y=0; y<num.size(); y++)
              {
                  int count=Integer.parseInt(String.valueOf(num.get(y)));
      
                  for(int z=0; z<count; z++)
                  {
                      System.out.print(alpha.charAt(y));
                  }
              }
          }
      }
      

      或者

      导入 java.lang.*; 导入 java.util.ArrayList;

      class Hi
      {
          public static void main(String[] args)
          {
              String a="a2b4c3";
              String alpha="";
              ArrayList<Integer> num=new ArrayList<>();
              for(int i=0;i<a.length();i++)
              {
                  char c=a.charAt(i);
                  if(Character.isDigit(c)==true)
                  {
                      num.add(Integer.parseInt(String.valueOf(c)));
                  }
                  else
                  {
                      alpha+=c;
                  }
              }
              for(int y=0; y<num.size(); y++)
              {
                  for(int z=0; z<num.get(y); z++)
                  {
                      System.out.print(alpha.charAt(y));
                  }
              }
          }
      }
      

      【讨论】:

        【解决方案3】:

        将您的 for 循环更改为:

        
        for(int y=0; y<num.size(); y++)
         {
            for(int z=0; z<Integer.parseInt(String.valueOf(num.get(y))); z++)
              {
                System.out.print(alpha.charAt(y));
              }
         }
        

        或者更好地尝试这种方法:

        class hi
        {
            public static void main(String[] args)
            {
                String a="a2b4c3";
                StringBuilder stringBuilder=new StringBuilder();
                for(int i=0;i<a.length()-1;i=i+2)
                {
                    int value=Integer.parseInt(String.valueOf(a.charAt(i+1)));
                    for (int j=0;j<value;j++){
                        stringBuilder.append(a.charAt(i));
                    }
                }
                System.out.println(stringBuilder.toString());
            }
        }
        

        【讨论】:

          【解决方案4】:

          试试这个。

          String input = "a2b4c3";
          Pattern pat = Pattern.compile("(?i)([a-z])(\\d+)");
          String output = pat.matcher(input).replaceAll(m -> m.group(1).repeat(Integer.valueOf(m.group(2))));
          System.out.println(output);
          

          【讨论】:

            【解决方案5】:

            问题在于'2' 的整数值50,参见http://www.asciitable.com/。这就是为什么打印 50 * a 的原因。

            解决方案:减去'0'(其值为48),例如在将其添加到列表之前:num.add(c - '0');。没有必要,但会使意图更清晰:然后您应该将 num 更改为 ArrayList&lt;Integer&gt;

            【讨论】:

            • 我没想到这个............谢谢兄弟............我知道我错了
            猜你喜欢
            • 2017-09-05
            • 1970-01-01
            • 2021-02-24
            • 1970-01-01
            • 1970-01-01
            • 2023-01-05
            • 2018-04-10
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多