写一个Java程序来打印这样的输出
输入:d3f4cf5
输出dddffffcfcfcfcfcf
for(int i=0; i<str.length();i++)
{
if(Character.isDigit(str.charAt(i)))
{r = str.charAt(i);
for(r=1;r<=i;r++) {
System.out.println(str.substring(t, i));
t = ++i;
}
}
if (i==str.length()-1) {
for (r = 1; r <= i; r++) {
System.out.println(str.substring(t));
}
}
}
答案 0 :(得分:0)
好吧,正如Ronald建议的那样,您可以拆分字符串并在数组上运行。
有关如何拆分的信息,请点击此处:Java - Split String by Number and Letters
让我们假设只有数组["d","3","f","4","cf","5"]
。然后,您可以执行以下操作:
for( int i = 0; i < array.length; i += 2 ) {
String letters = array[i];
int count = Integer.parseInt( array[i + 1] );
//loop and print here
}
请注意,这始终希望字符串以至少一个字母开头并以数字结尾。如果不是,则必须显式地处理该问题,即,如果第一个数字以数字开头(则可以仅通过“打印”一个空字符串n次来完成)并假定计数,则不要打印任何内容如果输入以字母结尾,则为1。
如果由于某种原因不能使用正则表达式,则可以在遍历字符串的字符时也使用正则表达式。然后,您可以结合使用以下步骤:
""
),然后重复步骤1 (您将当前字符添加到临时字符串)。答案 1 :(得分:0)
如果您的输入格式正确,则应执行以下操作:
public static void main(String[] args){
String input = "d3f4cf5";
System.out.println(uncompress(input));
}
private static String uncompress(String input) {
//Split input at each number and keep the numbers
// for the given input this produces [d3, f4, cf5]
String[] parts = input.split("(?<=\\d+)");
StringBuilder sb = new StringBuilder();
for(String str : parts){
// remove letters to get the number
int n = Integer.parseInt(str.replaceAll("[^0-9]", ""));
// remove numbers to get the letters
String s = str.replaceAll("[0-9]", "");
// append n copies of string to sb
sb.append(String.join("", Collections.nCopies(n, s)));
}
return sb.toString();
}