给出一个输入:
a3b4c5
输出应为:
aaabbbbccccc
我是怎么做这个程序的?
我在输入中给出了一个来自用户的字符串,然后检查它的字母是否是第一个 如果它是一个字母,请递增,直到达到要打印的计数器编号 我试图产生相同的输出,但我得到一个跟随行作为输出。
显示输出:
代码:
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++;
}
}
}
}
答案 0 :(得分:3)
示例代码:
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
注意:
这应该是某种形式的Run-length encoding,或者在这种情况下解码。
答案 1 :(得分:2)
这应该可以解决您的问题
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]);
}
}
}
基本上,通过使用单个if语句检查ch [i]是否为数字,您可以避免执行所有其他检查。如果ch [i]是一个数字,则通过从中减去字符“0”将其转换为整数。其余的应该是有意义的。
答案 2 :(得分:2)
以下是使用regex
和捕获组的简短示例。这是基于这样的假设:有时你可以有一个模式,其中有一个字符串,后面没有数字。
例如:
a2bc3 => aabccc
正则表达式模式:
"(\\D+)(\\d*)"
模式分解:
(\\D+)
- 将1个或多个非数字字符捕获到捕获组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);
}
}
结果:
aaabbbbccccc
aaabcbcbcbcbc
aaabc
abc
abababcdcdcdcdefefefefef
aaaaaaaaaabceeeeeeeeee
答案 3 :(得分:1)
前两个if语句意味着你会跳过任何小于或等于的内容 97或大于或等于90:所以你将跳过每一个可能的值。
您可能只想使用Character.isLetter()
和Character.isDigit()
。
此外,p < ch[i]
应为p < (Integer.valueOf("" + ch[i]))
;否则1将打印49份。
答案 4 :(得分:1)
你正在采用不等式,你没有采用正确的布尔运算符。此外,您最后需要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("");
}
}
答案 5 :(得分:0)
我是这样尝试的,它可能不是最好的,但你可以试试这个
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);
}
}
}