Могу ли я умножить строки в Java для повторения последовательностей?
У меня есть что-то вроде следующего:
int i = 3;
String someNum = "123";
Я хотел бы добавить i
"0" в someNum
строка. Есть ли способ, которым я могу умножить строку, чтобы повторить это, как это делает Python?
Так что я мог бы просто пойти:
someNum = sumNum + ("0" * 3);
или что-то подобное?
Где, в этом случае, мой конечный результат будет:
"123000".
19 ответов
Самым простым способом в простой Java без зависимостей является следующий однострочный:
new String(new char[generation]).replace("\0", "-")
Замените генерацию числом повторений, а "-" на строку (или символ), которую вы хотите повторить.
Все, что это делает, это создает пустую строку, содержащую 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");
}
}
Используя Java11 (текущий в фазе раннего доступа), вы можете достичь того же, используя String.repeat
API следующим образом:
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"
Нет, но вы можете в Скала! (А затем скомпилируйте это и запустите, используя любую реализацию 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);
Google Guava предоставляет еще один способ сделать это с Strings#repeat()
:
String repeated = Strings.repeat("pete and re", 42);
На ум приходит два способа:
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
,
Если вы повторяете отдельные символы, такие как OP, и максимальное количество повторений не слишком велико, то вы можете использовать простую операцию подстроки, например:
int i = 3;
String someNum = "123";
someNum += "00000000000000000000".substring(0, i);
Простой способ сделать это.
private String repeatString(String s,int count){
StringBuilder r = new StringBuilder();
for (int i = 0; i < count; i++) {
r.append(s);
}
return r.toString();
}
Нет. Java не имеет этой функции. Вы должны создать свою строку, используя StringBuilder и какой-то цикл.
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);
}
Я создал метод, который делает то же самое, что вы хотите, не стесняйтесь попробовать это:
public String repeat(String s, int count) {
return count > 0 ? s + repeat(s, --count) : "";
}
Я не верю, что Java изначально предоставляет эту функцию, хотя было бы неплохо. Я иногда пишу код Perl и x
Оператор в Perl очень удобен для повторения строк!
тем не мение StringUtils
в commons-lang
предоставляет эту функцию. Метод называется repeat()
, Ваш единственный вариант - создать его вручную с помощью цикла.
С гуавой:
Joiner.on("").join(Collections.nCopies(i, someNum));
Нет, ты не можешь. Однако вы можете использовать эту функцию, чтобы повторить символ.
public String repeat(char c, int times){
StringBuffer b = new StringBuffer();
for(int i=0;i < times;i++){
b.append(c);
}
return b.toString();
}
Отказ от ответственности: я напечатал это здесь. Могут быть ошибки.
Подобно тому, что уже было сказано:
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"
Обобщение ответа Дэйва Хартнолла (я в основном воспринимаю концепцию до абсурда, возможно, не используйте это ни в чем, где вам нужна скорость). Это позволяет заполнить строку символами 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);
Мы можем создать несколько строк, используя * в Python, но не в Java, вы можете использовать для цикла в вашем случае:
String sample="123";
for(int i=0;i<3;i++)
{
sample=+"0";
}
Там нет ярлыка для выполнения этого в Java, как пример, который вы дали в Python.
Вы должны сделать это:
for (;i > 0; i--) {
somenum = somenum + "0";
}
Самый простой способ это:
String someNum = "123000";
System.out.println(someNum);