2016-07-28 62 views
1

我有一个字符串FILENAME它实际上在foreach循环中保存文件名。字符串将是这样的:从字符串中获得2个字符

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

有什么办法去开始索引和位置的选择数量进行选择?

+0

是您的文件名模式一样吗?它会是MyFIle_TEST_United_Kingdom_xxx吗? – aksappy

回答

6

假设格式是这样的两个例子,我会使用分裂()和子()

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

非常感谢这么简单但准确的作品。我是新来的Java。 :) – Meen

+0

不客气@Meen,我们都习惯于在某个时候是新的,有乐趣的学习它,这太棒了! :-) –

0

如果格式是固定的比你能得到它这样

String rmtdir=Filename.substring(12, 14); 
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

0

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

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

出认沽将是:

IN 
0

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

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

前三可以通过正则表达式[^_]+匹配。意思是一组不是下划线的字符。对于你的日期,你需要8位数字\\d{8}。总之这正则表达式是:

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

现在,你有你可以使用它通过使用PatternMatcher类解析Java中的字符串中的正则表达式。

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