Могу ли я умножить строки на Java для повторения последовательностей?
У меня есть что-то вроде следующего:
int i = 3;
String someNum = "123";
Я хотел бы добавить i
"0" в строку someNum
. Есть ли у меня какой-то способ, чтобы я мог умножить строку, чтобы повторить ее, как это делает Python?
Так что я мог бы просто пойти:
someNum = sumNum + ("0" * 3);
или что-то подобное?
Где, в этом случае, моим окончательным результатом будет:
"123000".
Ответы
Ответ 1
Самый простой способ в простой Java без зависимостей - это следующий однострочный:
new String(new char[generation]).replace("\0", "-")
Замените генерацию числом повторений и "-" на строку (или char), которую вы хотите повторить.
Все это создает пустую строку, содержащую n чисел из 0x00 символов, а встроенный метод замены String # делает остальные.
Здесь образец для копирования и вставки:
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");
}
}
Ответ 2
Нет, но вы можете в Scala! (И затем скомпилируйте это и запустите его, используя любую реализацию Java!!!!)
Теперь, если вы хотите сделать это простым способом в java, используйте пакет Apost 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);
Ответ 3
Google Guava предоставляет другой способ сделать это с помощью Strings#repeat()
:
String repeated = Strings.repeat("pete and re", 42);
Ответ 4
Приходят в голову два способа:
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
.
Ответ 5
Если вы повторяете одиночные символы, такие как OP, и максимальное количество повторений не слишком велико, вы можете использовать простую операцию подстроки, например:
int i = 3;
String someNum = "123";
someNum += "00000000000000000000".substring(0, i);
Ответ 6
Нет. У Java нет этой функции. Вам нужно будет создать свою строку, используя StringBuilder и какой-то цикл.
Ответ 7
Java 8 предоставляет способ (хотя и немного неуклюжий). В качестве метода:
public static String repeat(String s, int n) {
return Stream.generate(() -> s).limit(n).collect(Collectors.joining(""));
}
или менее эффективный, но лучше выглядящий IMHO:
public static String repeat(String s, int n) {
return Stream.generate(() -> s).limit(n).reduce((a, b) -> a + b);
}
Ответ 8
с Dollar:
String s = "123" + $("0").repeat(3); // 123000
Ответ 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();
}
Ответ 10
С Guava:
Joiner.on("").join(Collections.nCopies(i, someNum));
Ответ 11
Я не верю, что Java изначально предоставляет эту функцию, хотя было бы неплохо. Иногда я пишу код Perl, а оператор x
в Perl очень удобен для повторения строк!
Однако StringUtils
в commons-lang
предоставляет эту функцию. Метод называется repeat()
. Единственный другой вариант - создать его вручную с помощью цикла.
Ответ 12
Нет, вы не можете. Однако вы можете использовать эту функцию для повторения символа.
public String repeat(char c, int times){
StringBuffer b = new StringBuffer();
for(int i=0;i < times;i++){
b.append(c);
}
return b.toString();
}
Отказ от ответственности: я набрал его здесь. Возможны ошибки.
Ответ 13
Обобщение ответа Дейва Хартнолла (я в основном принимаю концепцию ad absurdum, возможно, не использую это ни в чем, где вам нужна скорость).
Это позволяет заполнить строку с символами я после заданного шаблона.
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);
Ответ 14
Подобно тому, что уже было сказано:
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"
Ответ 15
Я создал метод, который делает то же самое, что вы хотите, не стесняйтесь попробовать следующее:
public String repeat(String s, int count) {
return count > 0 ? s + repeat(s, --count) : "";
}
Ответ 16
мы можем создавать многострочные строки, используя * в python, но не в java, которые вы можете использовать для цикла в вашем случае:
String sample="123";
for(int i=0;i<3;i++)
{
sample=+"0";
}
Ответ 17
Там нет ярлыка для этого в Java, как пример, который вы дали в Python.
Вам нужно будет сделать это:
for (;i > 0; i--) {
somenum = somenum + "0";
}
Ответ 18
Самый простой способ:
String someNum = "123000";
System.out.println(someNum);