RunLength Encoding - декомпрессия (Java)
Я использую RLE и пытаюсь создать программу декомпрессии на Java. Я имею:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Scanner;
public class Decompress {
public static String decode(String string) {
StringBuffer dest = new StringBuffer();
Pattern pattern = Pattern.compile("[0-9]+|[a-zA-Z]");
Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
int number = Integer.parseInt(matcher.group());
matcher.find();
while (number-- != 0) {
dest.append(matcher.group());
}
}
return dest.toString();
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter string: ");
String string = sc.nextLine();
String output = "";
System.out.println(decode(output));
}
}
Но это не сработает для меня. Я должен иметь пользовательский ввод, такой как a2b3 и вывод aabbb, он не может быть жестко закодирован
1 ответ
Вы, вероятно, должны сделать ([a-zA-Z])([0-9]+)
как регулярное выражение Таким образом, у вас уже есть части, проанализированные регулярным выражением.
Pattern pattern = Pattern.compile("([a-zA-Z])(\d+)");
Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
String letter = matcher.group();
int number = Integer.parseInt(matcher.group());
while (number-- != 0) {
dest.append(letter);
}
matcher.find();
}