在java中获取令牌的最佳方法

时间:2011-08-18 23:39:01

标签: java parsing

我有一些带有一些命名约定的文件 -

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 个答案:

答案 0 :(得分:1)

您可以使用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"

答案 1 :(得分:1)

只要它适用于您,解析文件名的方式无关紧要。如果你想采用正则表达式路线,这样的Pattern将起作用:

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

第一个捕获组是文件名,第二个是语言,第三个是输出。


那就是说,正则表达式似乎有点矫枉过正,那么使用String#split()会出现什么问题呢?