Разбить строку на массив лексем используя StringBuffer

Рейтинг: 1Ответов: 3Опубликовано: 15.04.2015

Не используя StringTokenizer, разбить строку типа StringBuffer на массив лексем. Целый день что-то пытаюсь, да не выходит.

Ответы

▲ 2Принят

StringBuffer, если посмотреть на исходники, хранит свой буфер в виде массива char[], а не в виде какого-то массива/списка исходных кусков полученных после append(), так что разбиение StringBuffer на лексемы ничем принципиально не отличается от разбиения строки String на лексемы.

А здесь выбор также достаточно ограничен: или использовать ваш нелюбимый StringTokenizer или split() или самому написать нечто вроде парсерчика (код не проверял - просто написал на коленках):

String s=myStringBuffer.toString(); //исходная строка
int start=0, end;
ArrayList<String> lexems=new ArrayList<String>; //складываем лексемы сюда
String separator=" "; //ваш разделитель - может быть любым
do {
   end=s.indexOf(separator, start);
   if(end >= 0) {
       lexems.add(s.substring(start, end);
       start=end+separator.length();
   }
   else
       lexems.add(s.substring(start));
} while(end >= 0);
▲ 3

Попробуйте это

StringBuffer s = new StringBuffer("asd zxc 123 sdf");
String[] a = s.toString().split(" ")
▲ 1

Немного не в тему вопроса, но как альтернативу можете использовать Google Guava, тогда все проще:

List<String> res = Splitter.on(CharMatcher.BREAKING_WHITESPACE).splitToList("asd zxc 123 sdf");