从字符串中获取2个字符

时间:2016-07-28 09:38:52

标签: java string substring talend

我有一个字符串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);

有没有办法转到起始索引并选择要选择的职位数?

5 个答案:

答案 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中的字符串,使用PatternMatcher类。

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);