计算字符串的长度并“填充”它

时间:2013-09-16 06:56:23

标签: java string object for-loop

我正在做一个需要带字符串和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变量中添加诸如空格之类的东西?谢谢你的帮助。

4 个答案:

答案 0 :(得分:3)

这是一个合理的开始......

padString期待两个参数,Stringint,所以这......

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”有什么意义?什么是“追加”方法?

因为这本书目前没有这些东西,还有另一种方法吗?