2015-03-22 5 views
0

Я делаю небольшую игру с текстовым полем. Текстовое поле будет рисовать строку, которая будет разделяться на несколько строк, чтобы вписаться в текстовое поле. У меня проблемы с разделением на несколько строк.Java разделяет строку на несколько строк

String[] line = new String[4]; 
int boxWidth = 200; 
String MESSAGE = "This is a long message to make sure that the line separation works."; 
String[] splitArray = null; 

try { 
    splitArray = MESSAGE.split("\\s+"); //split the words of the sentence into an array 
} catch (PatternSyntaxException e) { 
    CrashDumping.DumpCrash(e); 
} 

String cursentence = ""; 
int curleng = 0; 
int curline = 0; 
for (int i = 0; i < splitArray.length; i++) { 
    if (curleng + m.getStringWidth(splitArray[i], r.font1) <= boxWidth) { 
     curleng += m.getStringWidth(splitArray[i], r.font1); 
     cursentence += splitArray[i]; cursentence += " "; 
    } else { 
     line[curline] = cursentence; 
     cursentence = ""; 
     curline++; 
     curleng = 0; 
    } 
} 
for (int i = 0; i < line.length; i++) { 
    System.out.println("Line " + i + " - " + line[i]); 
} 

int getStringWidth(String sentence, Font font) является метод, который я написал, который возвращает ширину строки в пикселях. Этот метод работает; это не проблема.

public int getStringWidth(String text, Font font) { 
    AffineTransform affinetransform = new AffineTransform(); 
    FontRenderContext frc = new FontRenderContext(affinetransform,true,true); 
    return (int)(font.getStringBounds(text, frc).getWidth()); 
} 

Вывод должен выглядеть примерно так:

Line 0 - This is a long message to make sure 
Line 1 - that the line separation works. 
Line 2 - null 
Line 3 - null 

Но будет печатать только первую строку, последние 3 просто нуль. Поэтому по какой-то причине петля for ломается после завершения первой строки.

Что здесь происходит?

+0

вы ищете что-то вроде http://stackoverflow.com/questions/4212675/wrap-the-string-after-a-number-of-characters-word-wise-in-java? – Pshemo

+0

@Pshemo не совсем, потому что, если я понял, что этот вопрос был нужен, это просто распечатать его, и мне нужно сохранить строки в переменных, чтобы получить к ним доступ, когда я их потом покажу, печать предназначена только для отладки. –

+0

Вы должны связать текущее слово в ветке else. – rodrigoap

ответ

2

Вы назначаете line[curline] = cursentence; только тогда, когда ваша текущая строка заполнена. Но вы не выполняете присваивание после окончания цикла for, что означает, что ваш остаток, когда заканчиваются слова, теряется. Добавить этот блок кода под вас for цикл:

if (!"".equals(cursentence)) { 
    line[curline] = cursentence; 
} 

Как @rodrigoap сказал, вы также должны начать новую строку со словом, что не укладывалось в первой строке, которая goeas в else блок вместо из cursentence = "";

cursentence = splitArray[i]; 
+0

Я бы поставил строку кода ниже моего заявления else? –

+0

Неважно, используя эту строку кода и добавляя то, что сказал @rodrigoap. Спасибо за помощь –

Смежные вопросы