2014-01-11 2 views
0

Скажем, мы хотели бы написать метод получения всей книги в строке и произвольный односимвольный разделитель для разделения строк и возврата массива строк. Я придумал следующую реализацию (Java) (не предположит, не последовательные разделители и т.д.)Сплит-строки, разделенные произвольным символом

ArrayList<String> separater(String book, char delimiter){ 
ArrayList<String> ret = new ArrayList<>(); 
String word =""; 

    for (int i=0; i<book.length(), ++i){ 
     if (book.charAt(i)!= delimiter){ 
      word += book.charAt(i); 
     } else { 
      ret.add(word); 
      word = ""; 
     } 
    } 
    return ret; 
} 

Вопрос:. Интересно, есть ли способ использовать String.split() для более коротких решений? Это потому, что я не мог найти общий способ определения общего регулярного выражения для произвольного символьного разделителя.

String.split("\\.") if the delimiter is '.' 
String.split("\\s+"); if the delimiter is ' ' // space character 

То measn я не холодный найти общий способ генерации входного регулярного выражения методы разделения() из входного символа разделителя. Какие-либо предложения?

+0

??? так на каком языке вы хотите получить ответы? – alvas

+0

Что случилось с вызовом book.split ("+ разделитель)? Может быть, я не совсем понимаю вопрос – Alejandro

+0

@alvas Java я предпочитаю –

ответ

2
String[] array = string.split(Pattern.quote(String.valueOf(delimiter))); 

Это говорит, гуавы Splitter является гораздо более универсальным и хорошо ведущие себя чем String.split().

И примечание о вашем методе: конкатенация строки в цикле очень неэффективна. Поскольку Строки неизменяемы, он создает много временных строк и StringBuilders. Вместо этого вы должны использовать StringBuilder.

+0

Я полностью согласен с вами в отношении использования строк вместо StringBuilder, я использую строку просто для простоты. но смешно, что интервьюер Amazone полагает, что компилятор java позаботится об этом! –

+0

Компилятор действительно заботится об этом для кода, такого как 'String s =" hello "+ title +" "+ firstName +" "+ lastName;'. Но не для добавления в циклы. –

+0

Я просто получил мнение о вашем совете по использованию Guava Splitter (что, кстати, я не знаю, что это такое), поскольку ваше решение не будет работать для обратного слэша '\\' или даже string.split (Pattern.quote ("\\")) и вызывает ошибку java.util.regex.Pattern.error (Неизвестный источник) –

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