如何根据旁边的数字打印字符序列?
How to print sequence of characters according to the number next to it?
输入: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));
}
}
}
}
这段代码有什么问题,我没有得到预期的输出
我的输出是:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
ccccccccccccccccccccccccccccccccccccccccccccccccccc
需要更正或代码 java
问题是 '2'
具有整数值 50
,请参阅 http://www.asciitable.com/。这就是为什么你得到 50 * a 打印出来的原因。
解决方案:减去 '0'
(其值为 48
),例如在将其添加到列表之前:num.add(c - '0');
。不是必需的,但可以使意图更清晰:然后您应该将 num
更改为 ArrayList<Integer>
。
试试这个。
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);
您好,这是您的答案。
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));
}
}
}
}
将您的 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());
}
}
你考虑过这个吗?
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
打印结果。
输入: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));
}
}
}
}
这段代码有什么问题,我没有得到预期的输出
我的输出是:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb ccccccccccccccccccccccccccccccccccccccccccccccccccc
需要更正或代码 java
问题是 '2'
具有整数值 50
,请参阅 http://www.asciitable.com/。这就是为什么你得到 50 * a 打印出来的原因。
解决方案:减去 '0'
(其值为 48
),例如在将其添加到列表之前:num.add(c - '0');
。不是必需的,但可以使意图更清晰:然后您应该将 num
更改为 ArrayList<Integer>
。
试试这个。
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);
您好,这是您的答案。
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));
}
}
}
}
将您的 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());
}
}
你考虑过这个吗?
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
打印结果。