我可以将Java中的字符串乘以重复序列吗?

Mit*_*rax 86 java string

我有以下内容:

int i = 3;
String someNum = "123";
Run Code Online (Sandbox Code Playgroud)

我想isomeNum字符串中添加"0" .它是否有某种方式我可以像Python一样繁殖一个字符串来重复它?

所以我可以去:

someNum = sumNum + ("0" * 3);
Run Code Online (Sandbox Code Playgroud)

或类似的东西?

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

"123000".

小智 75

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

new String(new char[generation]).replace("\0", "-")
Run Code Online (Sandbox Code Playgroud)

生成替换为重复次数,将" - "替换为您想要重复的字符串(或字符).

所有这一切都是创建一个包含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");
    }
}
Run Code Online (Sandbox Code Playgroud)


les*_*es2 33

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

现在,如果您想在Java中使用简单的方法,请使用Apache commons-lang包.假设您正在使用maven,请将此依赖项添加到您的pom.xml:

    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.4</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

然后使用StringUtils.repeat,如下所示:

import org.apache.commons.lang.StringUtils
...
someNum = sumNum + StringUtils.repeat("0", 3);
Run Code Online (Sandbox Code Playgroud)

  • 你怎么认为他正在使用maven?:) (6认同)
  • 你必须做出一些假设才能解决现实问题.在这种情况下,我在我当前的项目中使用maven.我有一个pom.xml设置与commons-lang依赖.简而言之,这使我更容易回答他的问题.而且我不确定如果我不使用maven我会做什么 - 我想我必须为我的jar文件创建一个自定义位置...类似于maven存储库!然后在我的类路径中包含那些jar文件,并做我喜欢避免的各种工作.如果海报真的想破解java,那么她或他需要使用maven或其等价物.:) (4认同)

Mat*_*all 22

Google Guava提供了另一种方法Strings#repeat():

String repeated = Strings.repeat("pete and re", 42);
Run Code Online (Sandbox Code Playgroud)


Nam*_*man 20

String::repeat

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

例子

"A".repeat( 3 ) 
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)


Bal*_*usC 18

想到两种方式:

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
Run Code Online (Sandbox Code Playgroud)

方式2可以缩短为:

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

更多String#format()的是提供了API文档和的一个java.util.Formatter.

  • 方式1仅适用于单个字符,方式2仅适用于单个"0".不完全是我称之为问题的通用解决方案...... (3认同)

Dav*_*oll 17

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

int i = 3;
String someNum = "123";
someNum += "00000000000000000000".substring(0, i);
Run Code Online (Sandbox Code Playgroud)

  • 如果您问我,如果我想做“123”* 3,那么您的解决方案将不起作用,这不是一般答案。好的,这对于单个字符来说很优雅,但不灵活:) (2认同)
  • @Silviu 如果您问任何人,这不是一般性答案,也没有人要求一般性答案。我的开场评论涵盖了它适用的案例,包括 OP 的案例。 (2认同)

Geo*_*Geo 11

不,Java没有此功能.您必须使用StringBuilder创建String ,并使用某种循环.

  • String multiplyString(String str, int count){ StringBuilder sb = new StringBuilder(); for( int i = 0; i &lt; count; ++i ){ sb.append(str); 返回 sb.toString(); } (5认同)
  • 寒意.他在问如何做到这一点.他没有要求一个罐子. (3认同)
  • StringUtils已经过性能调整和测试.生成生产质量字符串实用程序库的时间是您没有的时间,除非您当前的项目是编写生产质量字符串实用程序库.不要编写你不需要的代码.此外,还有许多其他有用的方法可以使用StringUtils和commons-lang.值得依赖. (2认同)

Ali*_*ran 9

这样做的简单方法.

private String repeatString(String s,int count){
    StringBuilder r = new StringBuilder();
    for (int i = 0; i < count; i++) {
        r.append(s);
    }
    return r.toString();
}
Run Code Online (Sandbox Code Playgroud)

  • 应该真的使用StringBuilder.像这样的字符串连接相当昂贵. (6认同)

小智 8

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

public String repeat(String s, int count) {
    return count > 0 ? s + repeat(s, --count) : "";
}
Run Code Online (Sandbox Code Playgroud)


Boh*_*ian 6

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

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

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

public static String repeat(String s, int n) {
    return Stream.generate(() -> s).limit(n).reduce((a, b) -> a + b);
}
Run Code Online (Sandbox Code Playgroud)


dfa*_*dfa 5

美元:

String s = "123" + $("0").repeat(3); // 123000
Run Code Online (Sandbox Code Playgroud)