Лучший способ получить токены в Java - PullRequest
2 голосов
/ 19 августа 2011

У меня есть файлы с некоторыми соглашениями об именах -

Ex 1 - filename1.en.html.xslt
Ex 2 - filename2.de.text.xslt

where en/de - language, html/text - output 

I need to read individual files and populate the java object accordingly.

Also, en should be converted to en-US etc, while populating the language field.

Format.java

private String language ;
private string output ;

Каков наилучший способ сделать это? Я знаю, что это можно сделать с помощью обычного indexOf или с помощью строкового токенизатора или анализа через регулярное выражение.

Если регулярное выражение лучше, пожалуйста, какие-нибудь примеры кода?

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Не имеет значения, как вы анализируете имя файла, пока оно работает для вас. Если вы хотите воспользоваться маршрутом регулярного выражения, Pattern будет работать так:

Pattern p = Pattern.compile("([^.]+)\\.([^.]+)\\.([^.]+)\\.xslt");

Первая группа захвата - это имя файла, вторая - язык, а третья - вывод.


Тем не менее, регулярное выражение кажется излишним, так что не так с использованием String#split()?

1 голос
/ 19 августа 2011

Вы можете сделать это с помощью StringTokenizer , но String.split () в большинстве случаев должны сделать это.

String foo = "filename1.en.html.xslt"
String[] parts = foo.split("\\."); // regex: need to escape dot
System.out.println(parts[1]); // outputs "en"

С помощью StringTokenizer вы можете сделать:

String foo = "filename1.en.html.xslt"
StringTokenizer tokenizer = new StringTokenizer(foo, ".");
List<String> parts = new ArrayList<String>();
while(tokenizer.hasMoreTokens()) { 
    String part = tokenizer.nextToken();
    parts.add(part);
}

System.out.println(parts.get(1)); // "en"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...