Java 如何在给定字符串中打印以下元素?

Java 如何在给定字符串中打印以下元素?,java,string,Java,String,给定一个输入: a3b4c5 输出应为: aaabbbccc 我是怎么做这个节目的 我从用户那里得到一个输入中给出的字符串,然后首先检查其字母表。 如果是字母表,则递增,直到达到要打印的计数器编号。 我试图产生相同的输出,但我得到了以下输出行 输出显示: 代码: public class Pattern { public static void main(String s[]) throws NumberFormatException, IOException { B

给定一个输入:

a3b4c5

输出应为:

aaabbbccc

我是怎么做这个节目的

我从用户那里得到一个输入中给出的字符串,然后首先检查其字母表。
如果是字母表,则递增,直到达到要打印的计数器编号。
我试图产生相同的输出,但我得到了以下输出行

输出显示:

代码:

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”逻辑用于获取数字。因为我们已经知道它是一个数字,并且数字在字符列表中是有序的,所以减去数字0
0
会给您准确的时间来输出字符。我想让它尽可能接近您的原始代码。您能给我举个例子吗?例如,如果我说的是a3b3,那么3就是字符字符.0被减去,使其成为整数。否则它将接受ascii值并打印多次,对吗?@javaCoderMakeSimple是否希望一个字符重复9次以上?@Shar1er80,当然,它对大于9的数字不起作用。我想做的是指出使代码不起作用的原因。我的目标不是o改进它。必须一步一步地做。我希望那个些提出问题的人得到答案并理解