从字符串中获取 2 个字符

get 2 characters from a string

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

但是通过使用它我只能得到印度所需的数据。
对于其他国家/地区,我需要手动更新子字符串的第二部分,同时牢记国家/地区的扩展长度。

比如美国和德国:

String rmtdir = Filename.substring(Filename.length() - 12, Filename.length() - 14);

有什么方法可以转到起始索引和 select 个要 select 的位置?

假设格式类似于这两个示例,我将使用 split() 和 substring()

 String test = "MyFile_TEST_INDIA_20160728";
 String countryCode = test.split("_")[2].substring(0,2);
 System.out.println(countryCode); // print IN 

如果格式是固定的,你可以这样获取

 String rmtdir=Filename.substring(12, 14);

假设这部分 "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

您也可以使用正则表达式:- Demo for regex

String s = "MyFile_TEST_INDIA_20160728";    
String s2 = s.replaceAll("^\w+_([a-zA-Z]+)_\d+$", "").substring(0, 2);

输出将是:

  IN

您可以使用正则表达式将字符串拆分成组。在您的情况下,MyFile_TEST_INDIA_20160728 可以分为以下组:

(file)_(desc)_(country)_(date)

前三个可以用正则表达式匹配[^_]+。表示一组不是下划线的字符。对于日期,您需要恰好 8 位数字 \d{8}。这个正则表达式总共是:

[^_]+_[^_]+_[^_]+_\d{6}
// or with groups
([^_]+)_([^_]+)_([^_]+)_(\d{6})

现在您有了一个正则表达式,您可以使用它来解析 java 中的字符串,方法是使用 PatternMatcher class.

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