Java 如何在给定字符串中打印以下元素?
给定一个输入: a3b4c5 输出应为: aaabbbccc 我是怎么做这个节目的 我从用户那里得到一个输入中给出的字符串,然后首先检查其字母表。Java 如何在给定字符串中打印以下元素?,java,string,Java,String,给定一个输入: a3b4c5 输出应为: aaabbbccc 我是怎么做这个节目的 我从用户那里得到一个输入中给出的字符串,然后首先检查其字母表。 如果是字母表,则递增,直到达到要打印的计数器编号。 我试图产生相同的输出,但我得到了以下输出行 输出显示: 代码: public class Pattern { public static void main(String s[]) throws NumberFormatException, IOException { B
如果是字母表,则递增,直到达到要打印的计数器编号。
我试图产生相同的输出,但我得到了以下输出行 输出显示: 代码:
public class Pattern
{
public static void main(String s[]) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s1 = br.readLine();
char ch[] = s1.toCharArray();
for (int i = 0; i < ch.length;) {
if ((ch[i] <= 65) || (ch[i] >= 90)) {
i++;
} else if ((ch[i] <= 97) || (ch[i] >= 122)) {
i++;
} else {
if (ch[i] == '0' || ch[i] == '1' || ch[i] == '2'
|| ch[i] == '3' || ch[i] == '4' || ch[i] == '5'
|| ch[i] == '6' || ch[i] == '7' || ch[i] == '8'
|| ch[i] == '9') {
for (int p = 0; p < ch[i]; p++) {
System.out.println(ch[i - 1]);
}
}
i++;
}
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Pattern
{
public static void main(String s[]) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter input string: ");
String inputStr = br.readLine();
ArrayList<String> stringParts = new ArrayList<>();
Matcher matcher = Pattern.compile("\\D+|\\d+").matcher(inputStr);
while (matcher.find())
{
stringParts.add(matcher.group());
}
// Just to view the contents
System.out.println("stringParts: " + Arrays.toString(stringParts.toArray()));
StringBuilder sb = new StringBuilder();
for(int i = 0; i < stringParts.size(); i += 2) {
for(int j = 0; j < Integer.parseInt(stringParts.get(i + 1)); j++) {
sb.append(stringParts.get(i));
}
}
System.out.println("Output: " + sb.toString());
}
}
Enter input string: a3b4c5
stringParts: [a, 3, b, 4, c, 5]
Output: aaabbbbccccc
Enter input string: ab2cd3
stringParts: [ab, 2, cd, 3]
Output: ababcdcdcd
Enter input string: abc1def2xyz3
stringParts: [abc, 1, def, 2, xyz, 3]
Output: abcdefdefxyzxyzxyz
公共类模式
{
公共静态void main(字符串s[])引发NumberFormatException,IOException{
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
字符串s1=br.readLine();
char ch[]=s1.toCharArray();
对于(int i=0;i
这应该可以解决您的问题
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char ch[] = br.readLine().toCharArray();
for (int i = 1; i < ch.length; i++) {
if (Character.isDigit(ch[i])) {
for (int j = 0; j < ch[i]-'0'; j++) {
System.out.print(ch[i-1]);
}
}
}
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
char ch[]=br.readLine().toCharArray();
for(int i=1;i
基本上,通过使用一个if语句来检查ch[i]是否是一个数字,可以避免进行所有其他检查。如果ch[i]是一个数字,则通过从中减去字符“0”将其转换为整数。其余部分应该有意义。示例代码:
public class Pattern
{
public static void main(String s[]) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s1 = br.readLine();
char ch[] = s1.toCharArray();
for (int i = 0; i < ch.length;) {
if ((ch[i] <= 65) || (ch[i] >= 90)) {
i++;
} else if ((ch[i] <= 97) || (ch[i] >= 122)) {
i++;
} else {
if (ch[i] == '0' || ch[i] == '1' || ch[i] == '2'
|| ch[i] == '3' || ch[i] == '4' || ch[i] == '5'
|| ch[i] == '6' || ch[i] == '7' || ch[i] == '8'
|| ch[i] == '9') {
for (int p = 0; p < ch[i]; p++) {
System.out.println(ch[i - 1]);
}
}
i++;
}
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Pattern
{
public static void main(String s[]) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter input string: ");
String inputStr = br.readLine();
ArrayList<String> stringParts = new ArrayList<>();
Matcher matcher = Pattern.compile("\\D+|\\d+").matcher(inputStr);
while (matcher.find())
{
stringParts.add(matcher.group());
}
// Just to view the contents
System.out.println("stringParts: " + Arrays.toString(stringParts.toArray()));
StringBuilder sb = new StringBuilder();
for(int i = 0; i < stringParts.size(); i += 2) {
for(int j = 0; j < Integer.parseInt(stringParts.get(i + 1)); j++) {
sb.append(stringParts.get(i));
}
}
System.out.println("Output: " + sb.toString());
}
}
Enter input string: a3b4c5
stringParts: [a, 3, b, 4, c, 5]
Output: aaabbbbccccc
Enter input string: ab2cd3
stringParts: [ab, 2, cd, 3]
Output: ababcdcdcd
Enter input string: abc1def2xyz3
stringParts: [abc, 1, def, 2, xyz, 3]
Output: abcdefdefxyzxyzxyz
- 使用模式匹配器,将输入字符串拆分为字母和数字块
- 使用字符串生成器相应地附加它们
注:
在这种情况下,这应该是某种形式的或解码。前两条if语句意味着您将跳过小于或等于的任何内容 97或大于或等于90:因此将跳过所有可能的值 您可能只想使用
Character.islitter()
和Character.isDigit()
而且,
p
应该是p<(Integer.valueOf(“+ch[i]))
;否则,1将打印49份。您使用的是正确的不等式,而不是正确的布尔运算符。另外,您需要一个print
,而不是println
,最后需要一个println
。你应该有这样的东西
import java.io.IOException;
import java.lang.NumberFormatException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class t1
{
public static void main(String s[]) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s1 = br.readLine();
char ch[] = s1.toCharArray();
for (int i = 0; i < ch.length;) {
if ((ch[i] >= 65) && (ch[i] <= 90)) {
i++;
} else if ((ch[i] >= 97) && (ch[i] <= 122)) {
i++;
} else {
if (ch[i] >= '0' && ch[i] <= '9') {
for (int p = 0; p < ch[i]-'0'; p++) {
System.out.print(ch[i - 1]);
}
}
i++;
}
}
System.out.println("");
}
}
import java.io.IOException;
导入java.lang.NumberFormatException;
导入java.io.BufferedReader;
导入java.io.InputStreamReader;
公共类t1
{
公共静态void main(字符串s[])引发NumberFormatException,IOException{
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
字符串s1=br.readLine();
char ch[]=s1.toCharArray();
对于(int i=0;i 如果((ch[i]>=65)&&&(ch[i]=97)&&(ch[i]='0'&&ch[i],这里有一个使用regex
和捕获组的较短示例。这是基于这样的假设,即有时可以有一个模式,其中有一个字符串后面没有数字
例如:
a2bc3 => aabccc
正则表达式模式:
"(\\D+)(\\d*)"
模式分解:
(\\D+)
-将一个或多个非数字字符捕获到捕获组1中
(\\d*)
-将0个或更多数字字符捕获到捕获组2中
使用StringBuilder
生成输出
如果组2有数据,则将捕获组2转换为整数,以便知道在结果中重复组1的次数
public static void main(String[] args) throws Exception {
List<String> inputs = new ArrayList() {{
add("a3b4c5");
add("a3bc5");
add("a3bc");
add("abc");
add("ab3cd4ef5");
add("a10bc1e10");
}};
for (String input : inputs) {
StringBuilder output = new StringBuilder();
Matcher matcher = Pattern.compile("(\\D+)(\\d*)").matcher(input);
while (matcher.find()) {
String group1 = matcher.group(1);
String group2 = matcher.group(2);
int loopCount = 0;
if (!group2.isEmpty()) {
loopCount = Integer.parseInt(group2);
}
// Always print the group at least once
output.append(group1);
// Possibly print more
for (int i = 1; i < loopCount; i++) {
output.append(group1);
}
}
System.out.println(output);
}
}
我是这样尝试的,这可能不是最好的,但你可以试试这个
String st="A3B4C5";
String st1="";
int l=0;
char ar[]=st.toCharArray();
char c='0';
for(int i=0;i<ar.length;i++){
if(Character.isLetter(ar[i])){
c=ar[i];
}
else if(Character.isDigit(ar[i])) {
l=Character.getNumericValue(ar[i]);
for(int j=0;j<l;j++){
System.out.print(c);
}
}
}
String st=“A3B4C5”;
字符串st1=“”;
int l=0;
char ar[]=st.toCharArray();
字符c='0';
对于(inti=0;iOuch,if(ch[i]='0'| | ch[i]='1'| | ch[i]='2'| | ch[i]='3'| | ch[i]='4'| | ch[i]='5'| ch[i]='6'| | ch[i]='7'| ch[i]='8'|
这看起来很尴尬。还有更好的选择吗?@Raptor是的Raptor,这很糟糕,但首先要关注我需要获得的输出。解决方案很有趣,但OP要做的事情有点多。@blasko如果你尝试ab2cd3,它实际上不会起作用,因为当前的解决方案假设重复的模式只有一个字符。这是真的,但sn没有在原始问题中指定,所以我没有在我的代码片段中处理它。如果这是OP所寻找的,那么他会想走你所做的路线。@blasko Yup,所以我想这只是一个替代答案。它将适用于问题本身,但也适用于更一般的情况。我想这一切都取决于他的偏好e、 :)不理解ch[i]-“0”逻辑用于获取数字。因为我们已经知道它是一个数字,并且数字在字符列表中是有序的,所以减去数字00
会给您准确的时间来输出字符。我想让它尽可能接近您的原始代码。您能给我举个例子吗?例如,如果我说的是a3b3,那么3就是字符字符.0被减去,使其成为整数。否则它将接受ascii值并打印多次,对吗?@javaCoderMakeSimple是否希望一个字符重复9次以上?@Shar1er80,当然,它对大于9的数字不起作用。我想做的是指出使代码不起作用的原因。我的目标不是o改进它。必须一步一步地做。我希望那个些提出问题的人得到答案并理解