Могу ли я читать String Builder по строкам? И получите длину каждой строки.
EDIT:
"Я строю строку в StringBuilder и добавляю" \n "внутри. И мне нужно ее снова прочитать. Мне нужно учитывать, что каждая" \n "имеет новую строку."
Могу ли я читать String Builder по строкам? И получите длину каждой строки.
EDIT:
"Я строю строку в StringBuilder и добавляю" \n "внутри. И мне нужно ее снова прочитать. Мне нужно учитывать, что каждая" \n "имеет новую строку."
Учитывая ваше редактирование, это так же просто, как вызвать toString()
в экземпляре StringBuilder
, а затем вызвать split("\\n")
в возвращаемом экземпляре String
. И оттуда у вас будет массив String
, который вы можете пропустить, чтобы получить доступ к каждой "строке" экземпляра StringBuilder
. И, конечно, вызовите length()
для каждого экземпляра String
или "строки", чтобы получить его длину.
StringBuilder sb = new StringBuilder();
sb.append("line 1");
sb.append("\\n");
sb.append("line 2");
String[] lines = sb.toString().split("\\n");
for(String s: lines){
System.out.println("Content = " + s);
System.out.println("Length = " + s.length());
}
Создайте объект Scanner, и там вы можете легко разобрать строку для строки и получить длину.
Scanner scan = new Scanner(sb.toString()); // I have named your StringBuilder object sb
while (scan.hasNextLine() ){
String oneLine = scan.nextLine();
System.out.println(oneLine.length());
}
Не уверен, что вы пытаетесь сделать, но вы можете вызвать toString().split()
, чтобы получить массив. Вы можете разделить на разделители строк.
Я думаю, что нет метода для чтения строковых построек по строкам. но если вы хотите отделить целую строку за строкой, вы можете добавить символ новой строки "\n" " при добавлении строки в StringBuilder.
Использовать ( "\n" );, когда вы добавляете к stringbuilder. Это простой способ сделать.
Как уже было сказано, в простом случае вы можете просто использовать toString().split()
. Если вы хотите что-то более гибкое и которое также поддерживает удаление линии, довольно просто выполнить итерацию по строкам, просто отслеживая начальные и конечные значения последней строки, которую вы вернули:
new Iterator<String>() {
boolean hasNext = true;
boolean removed = false;
int start = 0;
int end = -1;
@Override public boolean hasNext() {
return hasNext;
}
@Override public String next() {
removed = false;
if (!hasNext) {
throw new NoSuchElementException();
}
start = end + 1;
end = value.indexOf("\n", start);
if (end == -1) {
hasNext = false;
}
return value.substring(
start,
end == -1 ? value.length() : end);
}
@Override public void remove() {
if (removed) {
throw new IllegalStateException("Multiple calls to remove() without and intervening call to next().");
}
value.delete(
start,
end == -1 ? value.length() : end + 1);
end = start - 1;
removed = true;
}
};
Вы можете увидеть это в классе утилиты, который возвращает LineIterator для String или StringBuilder здесь: http://pastebin.com/JA6abTg3
И у него есть тесты, которые показывают, как это можно использовать здесь: http://pastebin.com/X1b5cGX8