Добавление точек в system.out.println - PullRequest
0 голосов
/ 10 ноября 2010

ну, в принципе, у меня есть строка, которая имеет конечный знак 40, если добавить 2 слова длиной 10 букв, которые оставляют меня с 20 пробелами, то 20 пробелов должны быть заполнены точками ...... напримерпривет ................................ вы

или

стек ........................... переполнение

теперь у меня код работает нормально, я просто понятия не имею, как это порадоватьв system.out.println, чтобы результат выводился на консоль.

Я думал о том, чтобы использовать цикл while для печати по одному за раз, после того, как я проверил, сколько должно быть точек, после ввода нужных слов.

На данный момент у меня есть этокоторый явно не работает

{
       System.out.println (word1 + ".." + word2);

       while (wordlegnth1 + wordlegnth2 < LINELENGTH)

       {
           System.out.println (word1 + "." + word2);

           wordlegnth1++;

       }

Ответы [ 4 ]

3 голосов
/ 10 ноября 2010
final int LINE_LENGTH = 40;

String word1 = ...;
String word2 = ...;

StringBuilder sb = new StringBuilder(LINE_LENGTH);
sb.append(word1);
for (int i = 0; i + word1.length() + word2.length() < LINE_LENGTH; i++) {
    sb.append(".");
}
sb.append(word2);

System.out.println(sb.toString());

Примечание : использование StringBuilder позволяет избежать снижения производительности из-за неизменности строки

1 голос
/ 10 ноября 2010
/**
 * Formats a given string to 40 characters by prefixing it with word1 and 
 * suffixing it with word2 and using dots in the middle to make length of final
 * string = 40.
 * If string will not fit in 40 characters, -1 is returned, otherwise 0 is
 * returned.
 * 
 * @param word1 the first word
 * @param word2 the second word
 * @return 0 if string will fit in 40 characters, -1 otherwise
 */
public static int formatString(String word1, String word2) {
    final int LINELENGTH = 40;

    // determine how many dots we need
    int diff = LINELENGTH - (word1.length() + word2.length());

    if (diff < 0) {
        // it's too big
        System.out.println("string is too big to fit");
        return -1;
    }
    // add the dots
    StringBuilder dots = new StringBuilder();
    for (int i = 0; i < diff; ++i) {
        dots.append(".");
    }

    // build the final result
    String result = word1 + dots.toString() + word2;

    System.out.println(result);

    return 0;

}

public static void main(String[] args) throws Throwable {
    formatString("stack", "overflow");
    String str = "";
    for (int i = 0; i < 21; ++i) {
        str += "a";
    }
    formatString(str, str);
}

Выход:

stack...........................overflow
string is too big to fit
0 голосов
/ 10 ноября 2010

добавить apache commons-lang к вашему classpath и использовать StringUtils.leftPad()

System.out.println(str1 + StringUtils.leftPad(str2, 40 - str1.length(), '.'));

зачем писать метод, чтобы сделать что-то, что кто-то другой уже написал + протестировал?

0 голосов
/ 10 ноября 2010

Почему бы не начать с чего-то вроде:

int lengthA = word1.length();
int lengthB = word2.length();
int required = LINE_LENGHT - (lengthA + lengthB);

for(int i = 0; i < required; i++)
{
    System.out.print(".");
}

Его можно улучшить (например, попробуйте строки очень большого размера или используйте StringBuilder вместо System.out.print).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...