2010-11-10 3 views
0

Что я хочу сделать здесь, это создать строку, основанную на значении int.строка, основанная на значении int

Я знаю, что могу создать пустоту в основе, основанную на укусе методом length(), но задавался вопросом, как сделать обратное.

, например, у меня есть Int 30, с этим междунар Я хотел бы создать 30 точек ина линии на основе этого междунар и поместить его в Println

{ 


    while (wordlegnth1 + wordlegnth2 < LINELENGTH) 

    { 

     dots++; 
     wordlegnth1++; 

    } 

    System.out.println (word1 + dots + word2); 
    } 

в данный момент, А.Л. Println делает печатает введенные 2 слова, значение int на основе введенных двух слов, например, stack24overflow

В основном я хотел бы изменить это 24 из int в 24 точки (.......... ..............)

большое спасибо :)

+0

возможно дубликат [Padding строк в Java] (http://stackoverflow.com/questions/388461/padding-strings-in-java) –

ответ

2

Это особый случай, если вы хотите repeat a string (или персонаж, если на то пошло) несколько раз.

Однако, есть простое решение просто зацикливание на выходе период dots количество раз и печати, которые непосредственно на экран:

System.out.print(word1); 
for(int d = 0; d < dots; d++){ 
    System.out.print("."); 
} 
System.out.println(word2); 

В качестве альтернативы вы можете сформировать строку (с помощью StringBuilder), а затем выход это:

StringBuilder sb = new StringBuilder(dots); 
for(int d = 0; d < dots; d++){ 
    sb.append('.'); 
} 
System.out.println(word1 + sb + word2); 

Обратите внимание, что способность StringBuilder «s инициализируется dots.

+0

Но не пытайтесь что с 'System .err' ... –

+0

Это фактически не создает цепочку точек, а просто печатает кучу из них. – austinbv

+0

@zobgib: ОП не просил создать цепочку периодов, скорее, чтобы вывести количество периодов, соответствующих «точкам», это то, что это делает, и все, что он утверждает. –

1

Существует много способов сделать это.

Вот дешевый и простой, хотя и не очень вообще:

static final String manyDots = "..........................................."; 
    ... 
    dots = manyDots.substring(0, nosDots); // if nosDots <= manyDots.length() 

Вот более общий вариант:

char[] dotChars = new char[nosDots]; 
    Arrays.fill(dotChars, '.');  
    dots = new String(dotChars); 

... который более или менее эквивалентно:

StringBuilder sb = new StringBuilder(nosDots); 
    for (int i = 0; i < nosDots; i++) { 
     sb.append('.'); 
    } 
    dots = sb.toString(); 

Класс Apache StringUtils имеет различные методы для такого рода вещей; например leftPad, rightPad, center и repeat. Вызов StringUtils.repeat(".", nosDots) сделает именно то, что вы пытаетесь сделать.

И, наконец, метод String.format() и классы Formatter делают такие вещи на более высоком уровне.

1
int x - 30; 
String dots = ""; 
for (int i = 0; i < x; i++){ 
    dots += "."; 
} 
System.out.println(dots); 

То, что я делаю, это многократно использовать значение int и цикл. Оператор += объединяет переменную точек. Так, например "." + "." = ".."

+1

Конкатенация строк в цикле неэффективна. –

+1

Правда. Он создает (а затем удаляет) StringBuilder под обложками. –

1
char[] letters = new char[ 30 ]; 
Arrays.fill(letters, '.'); 
String s = new String(letters); 

System.out.println(s); 
Смежные вопросы