Если вы собираетесь использовать Scanner
, почему бы не использовать его для того, что он должен делать (токенизация)?
Scanner in = new Scanner(new File("names.txt")).useDelimiter("[\",]+");
ArrayList<String> text = new ArrayList<String>();
while (in.hasNext()) {
text.add(in.next());
}
Collections.sort(text);
Вам не нужно разбивать кавычки или разделять запятыми -Scanner
все делает за вас.
Этот фрагмент, включая время запуска Java, выполняется на моей машине за 0,625 с (время пользователя).Я подозреваю, что это должно быть немного быстрее, чем то, что вы делали.
EDIT OP спросил, какая строка была передана useDelimiter
.Это регулярное выражение .Когда вы убираете экранирование, требуемое Java для включения символа кавычки в строку, это [",]+
- и значение:
[...] character class: match any of these characters, so
[",] match a quote or a comma
...+ one or more occurence modifier, so
[",]+ match one or more of quotes or commas
Последовательности, которые будут соответствовать этому шаблону, включают:
"
,
,,,,
""",,,",","
и, действительно, ","
, к чему мы тут стремились.