【问题标题】:Counting length of strings and "padding" it计算字符串的长度并“填充”它
【发布时间】:2013-09-20 05:57:03
【问题描述】:

我正在做一个赋值,它需要一个带有字符串和 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 循环在字符串变量上添加空格等内容?感谢您的帮助。

【问题讨论】:

标签: java string object for-loop


【解决方案1】:

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

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) + "]");

我明白了

[你好]

【讨论】:

    【解决方案2】:

    直接的问题是addSpaces 中的for 循环会立即返回一个空格,无论您需要添加多少空格。更好的方法是让addSpaces 返回String 并向内部String 变量添加空格,直到长度正确,然后返回。

    此外,在 Java 中,通常从零开始循环,除非有特别充分的理由从其他地方开始。在您的情况下,word.length() 可能是一个很好的起点,但 1 不是。

    【讨论】:

    • @sᴜʀᴇsʜᴀᴛᴛᴀ 阅读我的整个句子。
    • 阅读.. :) 去喝更多的咖啡。 +1。
    【解决方案3】:

    您的添加空间什么也没返回。它是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 代替附加字符串以获得更好的性能。

    使用 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); 工作完美。假设我没有错过任何其他东西:)。

    【讨论】:

      【解决方案4】:

      谢谢大家,终于可以用了。

      这是代码的最终副本:

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

      因为书上暂时没有这些东西,有没有别的办法?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-30
        • 1970-01-01
        • 2011-04-27
        • 1970-01-01
        相关资源
        最近更新 更多