从字符串中获取 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 中的字符串,方法是使用 Pattern
和 Matcher
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);
我有一个字符串 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 中的字符串,方法是使用 Pattern
和 Matcher
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);