如何根据旁边的数字打印字符序列?

问题描述 投票:0回答:6

输入: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));
    }
  }
}
}

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

我的输出是:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccc

需要更正或使用java代码

java string character sequence
6个回答
1
投票

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

0
投票

您好,这是您的答案。

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

0
投票

问题在于

'2'
具有整数值
50
,请参阅 http://www.asciitable.com/ 。这就是为什么你会得到 50 * a 打印的原因。

解决方案:减去

'0'
(其值为
48
),例如将其添加到列表之前:
num.add(c - '0');
。不必要,但使意图更清晰:然后您应该将
num
更改为
ArrayList<Integer>


0
投票

试试这个。

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

0
投票

你考虑过这个吗?

String input = "a2b4c3";

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

打印

aabbbbccc

其工作原理如下:

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

0
投票
public static String pringChars(String a) {
Character myChar = null;
String finalString = "";
int value = 0;
for (int i = 0; i < a.length(); i++) {
char temp = a.charAt(i);
if (Character.isDigit(temp) == true) {
int k = Character.getNumericValue(temp);
for (int j = 0; j < k; j++) {
finalString += myChar;
}
myChar = null;
}else{
myChar = temp;
}
}
return finalString;
}
© www.soinside.com 2019 - 2024. All rights reserved.