【问题标题】:get 2 characters from a string从字符串中获取 2 个字符
【发布时间】:2016-12-02 14:57:48
【问题描述】:

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

有什么方法可以去起始索引,选择要选择的位置数吗?

【问题讨论】:

  • 您的文件名模式是否相同?会是 MyFIle_TEST_United_Kingdom_xxx 吗?

标签: java string substring talend


【解决方案1】:

假设格式和这两个例子一样,我会使用 split() 和 substring()

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

【讨论】:

  • 非常感谢您提供如此简单而准确的作品。我是java新手。 :)
  • 不客气@Meen,我们曾经在某个时候都是新手,学习它很有趣,太棒了! :-)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    如果格式是固定的,你可以像这样得到它

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

    【讨论】:

      【解决方案4】:

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

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

      输出将是:

        IN
      

      【讨论】:

        【解决方案5】:

        您可以使用正则表达式将字符串分成组。在您的情况下,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);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-01
          • 2011-03-29
          • 1970-01-01
          • 2015-02-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多