我可以在 Java 中乘以字符串来重复序列吗?[复制]

IT小君   2021-09-26T06:29:19

我有如下内容:

int i = 3;
String someNum = "123";

我想isomeNum字符串后附加“0” 它有什么方法可以像 Python 一样乘以一个字符串来重复它吗?

所以我可以去:

someNum = sumNum + ("0" * 3);

或类似的东西?

在这种情况下,我的最终结果是:

“123000”。

点击广告,支持我们为你提供更好的服务
评论(19)
IT小君

没有依赖关系的纯 Java 中最简单的方法是以下单行:

new String(new char[generation]).replace("\0", "-")

generation替换为重复次数,并将“-”替换为您想要重复的字符串(或字符)。

所有这些都是创建一个包含n个 0x00 字符的空字符串,而内置的 String#replace 方法会完成剩下的工作。

这是复制和粘贴的示例:

public static String repeat(int count, String with) {
    return new String(new char[count]).replace("\0", with);
}

public static String repeat(int count) {
    return repeat(count, " ");
}

public static void main(String[] args) {
    for (int n = 0; n < 10; n++) {
        System.out.println(repeat(n) + " Hello");
    }

    for (int n = 0; n < 10; n++) {
        System.out.println(repeat(n, ":-) ") + " Hello");
    }
}
2021-09-26T06:29:19   回复
IT小君

不,但你可以在 Scala 中!(然后编译它并使用任何 Java 实现运行它!!!!)

现在,如果您想在 Java 中以简单的方式进行操作,请使用 Apache commons-lang 包。假设您使用的是 maven,请将此依赖项添加到您的 pom.xml:

    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.4</version>
    </dependency>

然后使用 StringUtils.repeat 如下:

import org.apache.commons.lang.StringUtils
...
someNum = sumNum + StringUtils.repeat("0", 3);
2021-09-26T06:29:20   回复
IT小君

谷歌番石榴提供了另一种方法来做到这一点Strings#repeat()

String repeated = Strings.repeat("pete and re", 42);
2021-09-26T06:29:20   回复
IT小君

想到了两种方法:

int i = 3;
String someNum = "123";

// Way 1:
char[] zeroes1 = new char[i];
Arrays.fill(zeroes1, '0');
String newNum1 = someNum + new String(zeroes1);
System.out.println(newNum1); // 123000

// Way 2:
String zeroes2 = String.format("%0" + i + "d", 0);
String newNum2 = someNum + zeroes2;
System.out.println(newNum2); // 123000

方式2可以缩短为:

someNum += String.format("%0" + i + "d", 0);
System.out.println(someNum); // 123000

更多信息String#format()可在其 API 文档java.util.Formatter.

2021-09-26T06:29:20   回复
IT小君

String::repeat

使用String::repeatJava中11及更高版本。

例子

"A".repeat( 3 ) 

AAA

以及问题中的示例。

int i = 3; //frequency to repeat
String someNum = "123"; // initial string
String ch = "0"; // character to append

someNum = someNum + ch.repeat(i); // formulation of the string
System.out.println(someNum); // would result in output -- "123000"
2021-09-26T06:29:20   回复
IT小君

如果您像 OP 一样重复单个字符,并且最大重复次数不是太高,那么您可以使用这样的简单子字符串操作:

int i = 3;
String someNum = "123";
someNum += "00000000000000000000".substring(0, i);
2021-09-26T06:29:21   回复
IT小君

否。Java 没有此功能。您必须使用StringBuilder和某种循环来创建您的 String

2021-09-26T06:29:21   回复
IT小君

这样做的简单方法。

private String repeatString(String s,int count){
    StringBuilder r = new StringBuilder();
    for (int i = 0; i < count; i++) {
        r.append(s);
    }
    return r.toString();
}
2021-09-26T06:29:21   回复
IT小君

Java 8 提供了一种方法(虽然有点笨拙)。作为一种方法:

public static String repeat(String s, int n) {
    return Stream.generate(() -> s).limit(n).collect(Collectors.joining(""));
}

或效率较低,但更好看恕我直言:

public static String repeat(String s, int n) {
    return Stream.generate(() -> s).limit(n).reduce((a, b) -> a + b);
}
2021-09-26T06:29:21   回复
IT小君

我创建了一个可以做你想做的事情的方法,你可以试试这个:

public String repeat(String s, int count) {
    return count > 0 ? s + repeat(s, --count) : "";
}
2021-09-26T06:29:22   回复
IT小君

美元

String s = "123" + $("0").repeat(3); // 123000
2021-09-26T06:29:22   回复
IT小君

我不相信 Java 本身就提供此功能,尽管它会很好。我偶尔会写 Perl 代码x,Perl 中运算符在重复字符串时非常方便!

不过StringUtilsincommons-lang 提供了这个功能。该方法称为repeat()您唯一的其他选择是使用循环手动构建它。

2021-09-26T06:29:23   回复
IT小君

随着番石榴

Joiner.on("").join(Collections.nCopies(i, someNum));
2021-09-26T06:29:23   回复
IT小君

不,你不能。但是,您可以使用此功能重复一个字符。

public String repeat(char c, int times){
    StringBuffer b = new StringBuffer();

    for(int i=0;i &lt; times;i++){
        b.append(c);
    }

    return b.toString();
}

免责声明:我在这里打字。可能有错误。

2021-09-26T06:29:23   回复
IT小君

Dave Hartnoll 的回答的概括(我主要是采用荒谬的概念,也许不要在需要速度的任何地方使用它)。这允许按照给定的模式用 i 个字符填充字符串。

int i = 3;
String someNum = "123";
String pattern = "789";
someNum += "00000000000000000000".replaceAll("0",pattern).substring(0, i);

如果您不需要模式而只需要任何单个字符,则可以使用它(速度快一点):

int i = 3;
String someNum = "123";
char c = "7";
someNum += "00000000000000000000".replaceAll("0",c).substring(0, i);
2021-09-26T06:29:23   回复
IT小君

类似于已经说过的:

public String multStuff(String first, String toAdd, int amount) { 
    String append = "";
    for (int i = 1; i <= amount; i++) {
        append += toAdd;               
    }
    return first + append;
}

输入 multStuff("123", "0", 3);

输出 "123000"

2021-09-26T06:29:24   回复
IT小君

我们可以在 python 中使用 * 创建多个字符串,但不能在 Java 中使用 for 循环:

String sample="123";
for(int i=0;i<3;i++)
{
sample=+"0";
}
2021-09-26T06:29:24   回复
IT小君

像您在 Python 中给出的示例那样,在 Java 中执行此操作没有捷径。

你必须这样做:

for (;i > 0; i--) {
    somenum = somenum + "0";
}
2021-09-26T06:29:24   回复
IT小君

最简单的方法是:

String someNum = "123000";
System.out.println(someNum);
2021-09-26T06:29:24   回复