我正在做一个需要带字符串和int作为参数的方法的赋值。该方法应使用空格填充参数字符串,直到其长度为给定长度。例如,padString(“hello”,8应该返回“hello ___”(_表示三个空格))如果int高于字符串的长度,那么它将只返回字符串。我无法获得该程序的“填充”部分。
由于这个任务在本书的早期,我认为它可以用初学者的东西,如forloops,参数和常见的字符串方法完成,因为我不应该使用if / else语句。
这是我目前明显有缺陷的代码:
public class Exercise11 {
public static final String word = "congratulations";
public static final int length = 10;
public static void main(String[] args) {
padString();
}
public static String padString(String word, int length) {
if (word.length() >= length) {
return word.substring(0,length + 1);
} else {
String thing = word;
return word + addSpaces(word, length);
}
}
public static void addSpaces(String word, int length) {
for (int i = 1; i <= length-word.length(); i++) {
return (" ");
}
}
}
顺便说一下,有没有办法在带有for循环的String变量中添加诸如空格之类的东西?谢谢你的帮助。
答案 0 :(得分:3)
这是一个合理的开始......
padString
期待两个参数,String
和int
,所以这......
public static void main(String[] args) {
padString();
}
可以改为......
public static void main(String[] args) {
padString(word, length);
}
下一个问题出在addSpaces
方法中。循环中的return
语句意味着循环只会执行一次,并且只返回一个空格字符。
相反,你需要将每个循环上的空格连接到一个临时的String
,你将传回去,例如......
public static String addSpaces(String word, int length) {
StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < length - word.length(); i++) {
sb.append(" ");
}
return sb.toString();
}
所以,如果我跑......
System.out.println("[" + padString("hello", length) + "]");
我得到了
[hello ]
答案 1 :(得分:1)
当前问题是,for
中的addSpaces
循环会立即返回单个空格,无论您需要添加多少空格。更好的方法是addSpaces
返回String
并向内部String
变量添加空格,直到它的长度正确为止,然后返回。
此外,在Java中,习惯上从零开始循环,除非有特别强烈的理由从其他地方开始。在您的情况下,word.length()
可能是一个很好的起点,但1不是。
答案 2 :(得分:0)
你的添加空格没有返回任何内容。它是void
。内部逻辑也无法满足你的要求。
您的addSpaces
方法应该类似
public static String addSpaces(String word, int length) {
String spaces="";
for (int i = 1; i <= length-word.length(); i++) {
spaces += " ";
}
return spaces;
}
并且更喜欢使用StringBuilder
来代替String以获得更好的性能。
使用StringBuilder
public static String addSpaces(String word, int length) {
StringBuilder spaces=new StringBuilder();
for (int i = 1; i <= length-word.length(); i++) {
StringBuilder.append(" ");
}
return spaces.toString();
}
然后你return word + addSpaces(word, length);
完美无缺。假设我没有错过任何其他内容:)。
答案 3 :(得分:0)
谢谢你们,它现在终于有效了。
这是代码的最终副本:
public class Exercise11 {
public static final String WORD = "congratulations";
public static final int LENGTH = 10;
public static void main(String[] args) {
System.out.println(padString(WORD, LENGTH));
}
private static String padString(String word, int length) {
if (word.length() >= length) {
return word.substring(0,word.length());
} else {
return word + addSpaces(word, length);
}
}
public static String addSpaces(String word, int length) {
StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < length - word.length(); i++) {
sb.append("_"); // these are more visible than empty spaces
}
return sb.toString();
}
}
但我还有几个问题。构建“Stringbuilder”有什么意义?什么是“追加”方法?
因为这本书目前没有这些东西,还有另一种方法吗?