Java围绕数字进行拆分

Java围绕数字进行拆分,java,regex,string,Java,Regex,String,我有一个java字符串,如: "Corrected Acceleration 20130816_053116_RCS2_21 GNS Science" 我希望得到数字序列的最后一部分。它是最后一个下划线后面的数字 在这种情况下: 21 还有更多的例子 "Corrected Acceleration 20130346_053116_RCS2_15 GNS Science" 想要15 "Corrected Acceleration 20130346_053116_RCS2_13 GNS

我有一个java字符串,如:

 "Corrected Acceleration 20130816_053116_RCS2_21 GNS Science"
我希望得到数字序列的最后一部分。它是最后一个下划线后面的数字

在这种情况下:

21
还有更多的例子

 "Corrected Acceleration 20130346_053116_RCS2_15 GNS Science"
想要
15

 "Corrected Acceleration 20130346_053116_RCS2_13 GNS Science"
想要
13

 "Acceleration 123214_05312323_RCS2_40 GNS Science"
想要
40

此格式将保持不变。变化将是不同的数字,并且前面的子字符串
可能已更正
可能丢失


如何提取此文件?

此文件应满足您的需要。请记住,我没有测试过thism,但逻辑应该是可行的:

String test = "Corrected Acceleration 20130816_053116_RCS2_21 GNS Science";
int lastUnderScore = test.lastIndexOf("_");
test = test.substring(lastUnderScore + 1);
int numLength = test.indexOf(" ");
int number = Integer.valueOf(test.substring(0, numLength));
  • 查找“\”的最后一个实例
  • 将字符串向后剪切,使其从数字的开头开始
  • 查找第一个“”的位置(现在位于所需的数字之后)
  • 将字符串向下剪切到空格之前,并转换为整数

  • 您可以使用这样的正则表达式:

    Pattern pattern = Pattern.compile("_[0-9]+ ");
    Matcher matcher = pattern.matcher(text);
    matcher.find();
    
    // Note the + 1 and - 1 here to get rid of the leading underscore and the trailing space
    int number = Integer.parseInt(text.subString(matcher.start() + 1, matcher.end() - 1));
    

    您是否尝试写入正则表达式?您想要的总输出是多少?如果输入中有两个这样的数字呢?您可能需要更好地定义格式,格式是“由多个单词和空格组成的名称,然后是带下划线的数字…”还是“单词空间单词空间,然后是带下划线的数字…”这只是一个潜在的问题。您能否提供更多的示例字符串,以便我们了解哪些字符串会有所不同,哪些字符串会保持不变?