我想设计一个缩放字符串的程序。如果字符串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
请修改此现有代码
答案 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
*/