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

在java中获取令牌的最佳方法,java,parsing,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 populat

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

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 ; Ex 1-filename1.en.html.xslt Ex 2-filename2.de.text.xslt 其中en/de-语言,html/text-输出 我需要读取单个文件并相应地填充java对象。 此外,在填充语言字段时,en应转换为en US等。 Format.java 私有字符串语言; 私有字符串输出; 最好的方法是什么?我知道这可以通过普通的indexOf或者使用字符串标记器或者通过正则表达式进行解析来完成

如果正则表达式更好,请提供一些代码示例?

您可以使用正则表达式,但主要应该这样做

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"
String foo=“filename1.en.html.xslt”
StringTokenizer tokenizer=新的StringTokenizer(foo,“.”);
列表部件=新的ArrayList();
while(tokenizer.hasMoreTokens()){
String part=tokenizer.nextToken();
部分。添加(部分);
}
System.out.println(parts.get(1));//“嗯”

只要文件名对您有效,您如何解析文件名实际上并不重要。如果您想采用正则表达式路线,类似这样的方法将起作用:

Pattern p = Pattern.compile("([^.]+)\\.([^.]+)\\.([^.]+)\\.xslt");
第一个捕获组是文件名,第二个是语言,第三个是输出


也就是说,正则表达式看起来确实有些过分,那么使用
String#split()
有什么不对呢