У Miguel было сообщение об отладке Моно работы Linux с удаленной отладкой на Visual Studio. Это может быть чем-то, что Вы хотите изучить... Используя Visual Studio для отладки Моно . Существует также новый проект, названный CloverLeaf, цель которого позволяет отладить Моно в Windows в Visual Studio.
Apache Commons Lang (возможно, достаточно полезно, чтобы быть в пути к классам любого нетривиального проекта) имеет StringUtils.repeat () :
String filled = StringUtils.repeat("*", 10);
Easy!
Вышесказанное нормально. Не возражаете, если я задам вам вопрос - это вызывает у вас проблемы? Мне кажется, что вы оптимизируете еще до того, как узнаете, нужно ли вам это делать.
Теперь о моем чрезмерно спроектированном решении. Во многих (но не во всех) случаях вы можете использовать CharSequence вместо String.
public class OneCharSequence implements CharSequence {
private final char value;
private final int length;
public OneCharSequence(final char value, final int length) {
this.value = value;
this.length = length;
}
public char charAt(int index) {
if(index < length) return value;
throw new IndexOutOfBoundsException();
}
public int length() {
return length;
}
public CharSequence subSequence(int start, int end) {
return new OneCharSequence(value, (end-start));
}
public String toString() {
char[] array = new char[length];
Arrays.fill(array, value);
return new String(array);
}
}
Для повышения производительности у вас может быть одно предопределенное sting, если вы знаете максимальную длину, например:
String template = "###### ############################# ";
А затем просто выполните подстроку, как только вы узнаете длину.
public static String fillString(int count,char c) {
StringBuilder sb = new StringBuilder( count );
for( int i=0; i<count; i++ ) {
sb.append( c );
}
return sb.toString();
}
Что не так?
Нет необходимости выполнять цикл и использовать только стандартные классы библиотеки Java:
protected String getStringWithLengthAndFilledWithCharacter(int length, char charToFill) {
if (length > 0) {
char[] array = new char[length];
Arrays.fill(array, charToFill);
return new String(array);
}
return "";
}
Как видите, я также добавил подходящий код для length == 0
чехол.
Просто используйте класс StringUtils из проекта apache commons lang . У вас есть метод leftPad :
StringUtils.leftPad("foobar", 10, '*'); // Returns "****foobar"
Одно дополнительное примечание: похоже, что все публичные способы создания нового экземпляра String
обязательно включают в себя копию любого буфера, с которым вы работаете, будь то char []
, StringBuffer
или StringBuilder
. Из javadoc String
(и повторяется в соответствующих методах toString
из других классов):
Содержимое символьного массива копируется; последующая модификация массив символов не влияет вновь созданная строка.
Таким образом, вы получите операцию копирования, возможно, большого объема памяти после "быстрого заполнения" массива. Единственное решение, которое может избежать этой проблемы, - это решение от @mlk, если вы можете управлять работой напрямую с предлагаемой реализацией CharSequence
(что может быть так).
PS: Я бы опубликовал это как комментарий, но у меня пока недостаточно репутации для этого.
Использование DOLLAR прост:
String filled = $("=").repeat(10).toString(); // produces "=========="