我有一些带有一些命名约定的文件 -
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或使用字符串标记符或通过正则表达式解析来完成。
如果正则表达式是更好的代码样本吗?
答案 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()
会出现什么问题呢?