我无法让程序以有序的方式重复输出

时间:2016-08-08 14:25:50

标签: java

我想设计一个缩放字符串的程序。如果字符串d =" abc \ ndef \ nghi&#34 ;,水平scalling = 2,垂直scalling = 2,则scaleObj.scale(d,2,2)/ 定义在 /下面输出" aabbcc \ naabbcc \ nddeeff \ nddeeff \ ngghhii \ ngghhii"。

//output

aabbcc
aabbcc
ddeeff
ddeeff
gghhii
gghhii

我有一个问题,我已在下面定义:

//MainSix.java

public class MainSix{
    public static void main(String[] args){
        Scale scaleObj = new Scale();
        System.out.println(scaleObj.scale("abc\ndef",2,3));
    }

}

class Scale {

    public static String scale(String strng, int k, int v) {

        //Horizontal Scalling -k
        String s=strng.replaceAll(".", repeat("$0",k));

        //Verical Scalling
        String y = repeat(s,v);

        return y;

    }
    public static String repeat(String str, int times){
        return new String(new char[times]).replace("\0", str);
    }
}

当我编译这个时,我得到输出

aabbcc
ddeeffaabbcc
ddeeffaabbcc
ddeeff

//aabbcc\nddeeffaabbcc\n\nddeeffaabbcc\nddeeff

我如何获得输出

aabbcc
aabbcc
aabbcc
ddeeff
ddeeff
ddeeff

//aabbcc\naabbcc\n\naabbcc\nddeeffddeeff\nddeeff

请修改此现有代码

1 个答案:

答案 0 :(得分:0)

如果你希望abc \ ndef等于aabbcc \ nddeeff,如果比例设置为2。

您可以将字符串拆分为令牌(字符),然后用比例因子自行替换每个字符。

a将替换为aa,b => bb,c => cc等

在下面的示例中,我只是使用输出创建一个新字符串,而不是替换输入中的值(主要是首选项)。

int scale = 2;
String s = "abc", ss = "";
for (char c : s.toCharArray()) { 
  for (int i = 0; i < scale; i++) {
    ss += c;
  }
}
System.out.println(ss); //ss = aabbcc

<强> EDIT1:

int scale = 2, rpt = 3;
String s = "abc\ndef", ss = "";
for (String t : s.split("\n")) { //Word loop
  for (int j = 0; j < rpt; j++) { //Repeat loop
    for (char c : t.toCharArray()) { //Char loop
      for (int i = 0; i < scale; i++) { //Scale loop
        ss += c;
      }
    }
    ss += "\n";
  }
}
System.out.println(ss); 
/*
aabbcc
aabbcc
aabbcc
ddeeff
ddeeff
ddeeff
*/