我有一个字符串FILENAME
,它实际上将文件名保存在foreach循环中。字符串将类似于:
MyFile_TEST_INDIA_20160728
MyFile_TEST_AMERICA_20160728
MyFile_TEST_GERMANY_20160728
我需要获取国家/地区名称的前2个字符。我尝试了以下内容:
String rmtdir = Filename.substring(Filename.length() - 12, Filename.length() - 12);
System.out.println(rmtdir);
但是通过使用它,我只能获得INDIA所需的数据 对于其他国家/地区,我手动需要更新子字符串的第二部分,并考虑到国家/地区的扩展长度。
与美国和德国一样:
String rmtdir = Filename.substring(Filename.length() - 12, Filename.length() - 14);
有没有办法转到起始索引并选择要选择的职位数?
答案 0 :(得分:6)
假设格式类似于两个示例,我将使用split()和substring()
String test = "MyFile_TEST_INDIA_20160728";
String countryCode = test.split("_")[2].substring(0,2);
System.out.println(countryCode); // print IN
答案 1 :(得分:1)
假设这部分“MyFile_TEST_”将被修复,我们可以使用indexof和substring。
public static void main(String[] args) {
//String str = "MyFile_TEST_INDIA_20160728";
//String str = "MyFile_TEST_AMERICA_20160728";
String str = "MyFile_TEST_GERMANY_20160728";
int startIndex = str.indexOf("T_")+2;
int endIndex = str.indexOf("T_")+4;
System.out.println(str.substring(startIndex, endIndex));
}
输出 - IN,AM和GE
答案 2 :(得分:0)
如果格式是固定的,你可以像这样得到它
String rmtdir=Filename.substring(12, 14);
答案 3 :(得分:0)
您也可以使用正则表达式: - Demo for regex
String s = "MyFile_TEST_INDIA_20160728";
String s2 = s.replaceAll("^\\w+_([a-zA-Z]+)_\\d+$", "$1").substring(0, 2);
输出将是:
IN
答案 4 :(得分:0)
您可以使用正则表达式将字符串拆分为组。在您的情况下,MyFile_TEST_INDIA_20160728
可以分组:
(file)_(desc)_(country)_(date)
前三个可以与正则表达式[^_]+
匹配。表示不是下划线的字符组。对于日期,您需要8个数字\\d{8}
。这个正则表达式总是:
[^_]+_[^_]+_[^_]+_\\d{6}
// or with groups
([^_]+)_([^_]+)_([^_]+)_(\\d{6})
现在你有一个正则表达式,你可以使用它来解析java中的字符串,使用Pattern
和Matcher
类。
import java.util.regex.Pattern;
import java.util.regex.Matcher;
...
String text = "MyFile_TEST_INDIA_20160728";
String regex = "([^_]+)_([^_]+)_([^_]+)_(\\d{8})";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
matcher.find();
System.out.println("file: " + matcher.group(1));
System.out.println("desc: " + matcher.group(2));
System.out.println("country: " + matcher.group(3));
System.out.println("date: " + matcher.group(4));
然后获取该国的前两个字母非常简单:
String country = matcher.group(3).substring(0, 2);
System.out.println("country: " + country);