Сканер Java по сравнению с String.split () по сравнению с StringTokenizer; который я должен использовать?

Ответ прост: element.all имеет свою собственную функцию , затем , объявленную отдельно.

Поэтому, когда вы делаете так

let result = element.all();

, вы получите ElementArrayFinder в результате, как указано в разделе Возвращает . ElementArrayFinder - это объект, который имеет все заданные вами функции get, each и т. Д.

Но если превратить его в обещание,

let result = await element.all();

, то он вернет A promise which will resolve to an array of ElementFinders represented by the ElementArrayFinder., что в основном равно ElementFinder[], как указано в разделе Возвращает функции ElementArrayFinder.prototype.then.

10
задан skaffman 15 May 2011 в 12:56
поделиться

3 ответа

Для линии обработки вы можете использовать сканер и получать токены из в каждой строке вы можете использовать split.

Scanner scanner = new Scanner(new File(loc));
try {
    while ( scanner.hasNextLine() ){
        String[] tokens = scanner.nextLine().split("~");
        // do the processing for tokens here
    }
}
finally {
    scanner.close();
}
6
ответ дан 3 December 2019 в 16:54
поделиться

Вы можете использовать метод useDelimiter ("~") , чтобы позволить вам перебирать токены в каждой строке с hasNext () / next () , в то же время используя hasNextLine () / nextLine () для перебора самих строк.

РЕДАКТИРОВАТЬ: Если вы При выполнении сравнения производительности вы должны предварительно скомпилировать регулярное выражение при выполнении теста split ():

Pattern splitRegex = Pattern.compile("~");
while ((line = bufferedReader.readLine()) != null)
{
  String[] tokens = splitRegex.split(line);
  // etc.
}

Если вы используете String # split (String regex) , регулярное выражение будет перекомпилироваться каждый раз , (Сканер автоматически кэширует все регулярные выражения при первой их компиляции.) Если вы сделаете это, я не ожидаю увидеть большую разницу в производительности.

5
ответ дан 3 December 2019 в 16:54
поделиться

Я бы сказал split () самый быстрый и, вероятно, достаточно хорош для того, что вы делает. Это менее гибкий, чем сканер , хотя. StringTokenizer устарел и доступен только для обратной совместимости, поэтому не используйте его.

РЕДАКТИРОВАТЬ: Вы всегда можете протестировать обе реализации, чтобы увидеть, какая из них быстрее. Мне любопытно, может ли сканер быть быстрее, чем split () . Разделение может быть быстрее для сканера VS данного размера , но я не уверен в этом.

3
ответ дан 3 December 2019 в 16:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: