从特定单词后面的字符串中获取子字符串

Bis*_*han 13 java string substring

我有以下字符串.

ABC Results for draw no 2888
Run Code Online (Sandbox Code Playgroud)

我想2888从这里提取.这意味着,我需要no在上面的字符串之后提取字符.

我总是在这个词之后提取数字no.字符串不包含其他no地方的其他字母组合.字符串可能包含其他数字,我不需要提取它们.总是在数字之前会有一个空格,我希望提取的数字总是在字符串的末尾.

我怎么能实现这个目标?

Jun*_*san 20

yourString.substring(yourString.indexOf("no") + 3 , yourString.length());
Run Code Online (Sandbox Code Playgroud)

  • 您可能应该在末尾添加`trim`或用`3`替换`2`以获得数字...并在`length`之后添加`()`. (4认同)

Rah*_*thi 8

你可以试试这个

String example = "ABC Results for draw no 2888";
System.out.println(example.substring(example.lastIndexOf(" ") + 1));
Run Code Online (Sandbox Code Playgroud)


YoY*_*oYo 6

您总是希望努力实现易于配置和修改的东西。这就是为什么我总是建议选择Regex 模式匹配而不是其他搜索。

示例,请考虑以下示例:

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Play {
  public static void main(String args[]) { 
    Pattern p = Pattern.compile("^(.*) Results for draw no (\\d+)$");
    Matcher m = p.matcher("ABC Results for draw no 2888");
    m.find();
    String groupName = m.group(1);
    String drawNumber = m.group(2);
    System.out.println("Group: "+groupName);
    System.out.println("Draw #: "+drawNumber);
  }
}
Run Code Online (Sandbox Code Playgroud)

现在从提供的模式中,我可以轻松识别有用的部分。它可以帮助我识别问题,并且我可以识别模式中对我有用的其他部分(我已经添加了组名)。

另一个明显的好处是,我可以轻松地将该模式从外部存储在配置文件中。


小智 6

对于任何愿意使用无处不在的 Apache Commons StringUtils 实现此目标的人:

String parsed = StringUtils.substringAfter(yourString, "no ");
Run Code Online (Sandbox Code Playgroud)