Символ несколько раз java

Java: String — добавить символ n раз

Есть ли простой способ добавить символ или другую строку n-раз в существующую строку? Я не мог ничего найти в String , Stringbuilder , так далее.

15 ответов

Вы можете сделать это, используя потоковые API Java 8. Следующий код создает строку «cccc» от «c» :

String s = "c"; int n = 4; String sRepeated = IntStream.range(0, n).mapToObj(i -> s).collect(Collectors.joining("")); 

Апаш commons-lang3 имеет StringUtils.repeat(String, int) , с этим вы можете сделать (для простоты, а не с StringBuilder ):

String original; original = original + StringUtils.repeat("x", n); 

Поскольку это открытый исходный код, вы можете прочитать, как он написан. Есть небольшая оптимизация для маленьких нс, если я правильно помню, но большую часть времени она использует StringBuilder ,

В случае Java 8 вы можете сделать:

int n = 4; String existing = ". "; String result = existing + String.join("", Collections.nCopies(n, "*")); 

В Java 8 String.join метод был добавлен. Но Collections.nCopies есть даже в Java 5.

В случае повторения одного символа (не String) вы можете использовать Arrays.fill:

 String original = "original "; char c = 'c'; int number = 9; char[] repeat = new char[number]; Arrays.fill(repeat, c); original += new String(repeat); 
String input = "original"; String new = "new"; //new string to be added int n = 10 // no of times we want to add input = input + new String(new char[n]).replace("\0", new);` 

Вы можете использовать метод Strings.repeat в Guava:

String existingString = . existingString += Strings.repeat("foo", n); 

но вы должны использовать вместо этого StringBuilder и сохранить память

int n = 3; String existing_string = "string"; StringBuilder builder = new StringBuilder(existing_string); for (int i = 0; i < n; i++) < builder.append(" append "); >System.out.println(builder.toString()); 

Лучше использовать StringBuilder вместо String потому что String является неизменным классом, и его нельзя изменить после создания: в String каждая конкатенация приводит к созданию нового экземпляра класса String с измененной строкой.

В дополнение к ответам выше, вы должны инициализировать StringBuilder с соответствующей способностью, особенно, что вы уже знаете это. Например:

int capacity = existingString.length() + n * appendableString.length(); StringBuilder builder = new StringBuilder(capacity); 
 String toAdd = "toAdd"; StringBuilder s = new StringBuilder(); for(int count = 0; count < MAX; count++) < s.append(toAdd); >String output = s.toString(); 
public String appendNewStringToExisting(String exisitingString, String newString, int number) < StringBuilder builder = new StringBuilder(exisitingString); for(int iDx = 0; iDx < number; iDx++)< builder.append(newString); >return builder.toString(); > 

Чтобы иметь представление о снижении скорости, я протестировал две версии: одну с Array.fill и одну с StringBuilder.

public static String repeat(char what, int howmany)
public static String repeatSB(char what, int howmany)
public static void main(String. args) < String res; long time; for (int j = 0; j < 1000; j++) < res = repeat(' ', 100000); res = repeatSB(' ', 100000); >time = System.nanoTime(); res = repeat(' ', 100000); time = System.nanoTime() - time; System.out.println("elapsed repeat: " + time); time = System.nanoTime(); res = repeatSB(' ', 100000); time = System.nanoTime() - time; System.out.println("elapsed repeatSB: " + time); > 

(обратите внимание, что цикл в основной функции — это пнуть в JIT)

Результаты приведены ниже:

elapsed repeat: 65899 elapsed repeatSB: 305171 

Имейте в виду, что если «n» большое, возможно, было бы не очень хорошей идеей использовать +=, поскольку каждый раз, когда вы добавляете еще одну строку через +=, JVM будет создавать новый объект (достаточно информации об этом вокруг).

StringBuilder b = new StringBuilder(existing_string); for(int i = 0; i return b.toString(); 

На самом деле это не кодирование в IDE, поэтому могут возникнуть незначительные недостатки, но это основная идея.

Источник

Печатать символ несколько раз

Как напечатать символ несколько раз в одной строке? Это означает, что я не могу использовать цикл.

Я пытаюсь напечатать » _» несколько раз.

Я пробовал этот метод, но он не работает:

Вы можете печатать в той же строке с System.out.print(» _»); поэтому вы можете использовать цикл. print вместо println не добавляет новый символ строки.

Будут напечатаны: _ _ _ _ _ .

Если вы можете использовать внешние библиотеки, StringUtils.repeat отлично подходит для вас:

int s = 5; System.out.println(StringUtils.repeat('_', s)); 

РЕДАКТИРОВАТЬ:
Чтобы ответить на вопрос в комментариях – StringUtils.repeat принимает два параметра – char вы хотите повторить, и количество раз, которое вы хотите, и возвращает String состоящую из этого повторения. Итак, в приведенном выше примере он вернет строку из пяти символов подчеркивания _____ .

Вы можете использовать новый Stream API для достижения этого. Всегда есть итерация за кулисами, но это одна из возможных реализаций.

Stream.generate(() -> " _").limit(5).forEach(System.out::print); // _ _ _ _ _ 

Существует не ярлык, как то, что вы разместили…

И что вы подразумеваете под “одной строкой”?

Если в одной строке кода… см. Mureinik answer

Если напечатать “_” в одной строке:

 System.out.print("_"); System.out.print("_"); System.out.print("_"); System.out.print("_"); System.out.print("_"); 
public void recursiveMe(int n) < if(n  > recursiveMe(1); // call the function with 1. 

С помощью одного вызова print / println и использования вашей переменной “s”:

System.out.println(Stream.generate(() -> " _").limit(s).collect(Collectors.joining())) 

Источник

Java: String — добавить символ n раз [дубликаты]

Есть ли простой способ добавить символ или другую строку n-times в существующую строку? Я не мог найти ничего в String , Stringbuilder и т.д.

Я не смог ничего найти в String, Stringbuilder . Я уверен, что вы не видели метод append(str) метода StringBuilder или + concat операции String .

Любой метод, который вы используете, будет использовать цикл для вас. Вы можете написать такой собственный метод.

15 ответов

Вы можете сделать это, используя потоковые API Java 8. Следующий код создает строку «cccc» из «c» :

String s = "c"; int n = 4; String sRepeated = IntStream.range(0, n).mapToObj(i -> s).collect(Collectors.joining("")); 

Apache commons-lang3 имеет StringUtils.repeat(String, int) , с этим вы можете сделать (для простоты, а не с StringBuilder ):

String original; original = original + StringUtils.repeat("x", n); 

Поскольку он является открытым исходным кодом, вы можете прочитать, как он написан. Для небольших n-s существует небольшая оптимизация, если я правильно помню, но большую часть времени она использует StringBuilder .

В случае повторения одного символа (а не строки) вы можете использовать Arrays.fill:

 String original = "original "; char c = 'c'; int number = 9; char[] repeat = new char[number]; Arrays.fill(repeat, c); original += new String(repeat); 

В случае Java 8 вы можете:

int n = 4; String existing = ". "; String result = existing + String.join("", Collections.nCopies(n, "*")); 

В Java 8 был добавлен метод String.join . Но Collections.nCopies даже в Java 5.

String input = "original"; String newStr = "new"; //new string to be added int n = 10 // no of times we want to add input = input + new String(new char[n]).replace("\0", newStr); 

Вы можете использовать Guava Strings.repeat метод:

String existingString = . existingString += Strings.repeat("foo", n); 

Лучше использовать StringBuilder вместо String , потому что String является неизменяемым классом и не может быть изменен после создания: в String каждое конкатенация приводит к созданию нового экземпляра класса String с измененной строкой.

но вместо этого вы должны использовать StringBuilder и сохранить память

int n = 3; String existing_string = "string"; StringBuilder builder = new StringBuilder(existing_string); for (int i = 0; i < n; i++) < builder.append(" append "); >System.out.println(builder.toString()); 

В дополнение к приведенным выше ответам вы должны инициализировать StringBuilder с соответствующей пропускной способностью, особенно, что вы уже знаете об этом. Например:

int capacity = existingString.length() + n * appendableString.length(); StringBuilder builder = new StringBuilder(capacity); 
 String toAdd = "toAdd"; StringBuilder s = new StringBuilder(); for(int count = 0; count < MAX; count++) < s.append(toAdd); >String output = s.toString(); 
public String appendNewStringToExisting(String exisitingString, String newString, int number) < StringBuilder builder = new StringBuilder(exisitingString); for(int iDx = 0; iDx < number; iDx++)< builder.append(newString); >return builder.toString(); > 

Я думаю, что вы не имели в виду «существующую строку» в кавычках. Правильно? Вы хотели передать аргумент там.

Чтобы получить представление об ограничении скорости, я протестировал две версии: одну с Array.fill и одну с StringBuilder.

public static String repeat(char what, int howmany)
public static String repeatSB(char what, int howmany)
public static void main(String. args) < String res; long time; for (int j = 0; j < 1000; j++) < res = repeat(' ', 100000); res = repeatSB(' ', 100000); >time = System.nanoTime(); res = repeat(' ', 100000); time = System.nanoTime() - time; System.out.println("elapsed repeat: " + time); time = System.nanoTime(); res = repeatSB(' ', 100000); time = System.nanoTime() - time; System.out.println("elapsed repeatSB: " + time); > 

(обратите внимание, что петля в основной функции — это удар в JIT)

elapsed repeat: 65899 elapsed repeatSB: 305171 

Источник

Как умножить строку java

В Java мы не можем просто умножить строку на число n , чтобы повторить эту строку n раз. Чтобы повторить строку несколько раз в Java, можно использовать метод строки repeat() . Этот метод возвращает новую строку, значение которой является конкатенацией этой строки, повторенной энное количество раз. Например,

var word = "abc"; // Повторяем строку 3 раза var repeated = word.repeat(3); System.out.println(repeated); // => "abcabcabc" 

Источник

Читайте также:  Python deserialize json to object
Оцените статью