0

编码新手..到目前为止我有这个:

public class Main {
    public static void main(String[] args) {

        String sOS1 = stringOfStars("a");
            System.out.println(sOS1);
        String sOS2 = stringOfStars("Hello, world!");
            System.out.println(sOS2);
        String sOS3 = stringOfStars("012345");
            System.out.println(sOS3);
}
    static String stringOfStars(String a) {
        String string = "";
        for(int i = 0; i < a.length(); i++)
            string = string + "*";
        return string;
        
        // NEED ADDITIONAL CODE HERE

    }
}

我需要的附加条件:

  1. 如果字符长度小于 3,则返回由 3 个星号组成的字符串。
  2. 如果字符长度大于 10,则返回由 10 个星号组成的字符串。
4

4 回答 4

1

有很多不同的方法可以做到这一点——除了有很多如果。从根本上说,您需要锻炼-

  1. 输出多少元素(星),然后;
  2. 一种生产方式。

注意:string + string IN java 很容易编写,但会导致代码变慢,因为它引入了所有临时变量。这篇文章< https://www.geeksforgeeks.org/string-vs-stringbuilder-vs-stringbuffer-in-java/ >讲了String/StringBuilder/StringBuffer的相对优劣(如果你有兴趣的话)。

因此对于

星数 - 使整数适合 2 个值之间的一种很酷的方法 - 在数学意义上 [LOWER, HIGHER] - 是使用最小值和最大值。

final int constrained = Math.max(LOWER, Math.min(HIGHER, input));

生产星星 - Apache Commons Lib StringUtils简洁明了(Java11 之前)。

StringUtils.repeat('*', 5);
于 2021-03-08T03:03:03.127 回答
0

另一种方法是使用正则表达式将任何字符替换为星号

static String stringOfStars(String str){
    return str.replaceAll(".", "*");
}
于 2021-03-08T11:20:44.303 回答
0

类似于 onkar ruikar 的回答:

static String stringOfStars(String a) {
    int count = 3;
    final int aLength = a.length();
    if (aLength > 3) {
        count = Math.min(aLength, 10);
    }
    return "*".repeat(count);
}
于 2021-03-08T04:18:56.883 回答
0

使用简单 if else 块的解决方案:

    static String stringOfStars(String a) {
        int count = 3;
        final int alen = a.length();
        if(alen > 10) {   //if more than 10
            count = 10;
        } else if(alen > 3) { //if between 3 and 10
            count = alen;
        }
        return "*".repeat(count);
    }
于 2021-03-08T03:14:43.120 回答