在特定单词之后从字符串中获取子字符串
Posted
技术标签:
【中文标题】在特定单词之后从字符串中获取子字符串【英文标题】:Getting a substring from a string after a particular word 【发布时间】:2014-10-03 05:32:10 【问题描述】:我有以下字符串。
ABC Results for draw no 2888
我想从这里提取2888
。这意味着,我需要在上面的字符串中提取no
之后的字符。
我总是提取单词no
后面的数字。该字符串在其中的其他位置不包含其他 no
字母组合。字符串可能包含其他数字,我不需要提取它们。在数字之前总是会有一个空格,我希望提取的数字总是在字符串的末尾。
我怎样才能做到这一点?
【问题讨论】:
也许是我,但您的问题,尤其是您的要求似乎不完整。你会总是在“不”这个词之后提取一个数字吗?字符串中的其他地方是否不包含其他“否”字母组合?字符串是否不包含您不希望或不希望提取的其他数字?数字前总是有空格吗?数字总是在字符串的末尾吗?请通过澄清您的要求来帮助清理我混乱的多云头脑。还请展示您尝试过的方法并告诉我们它是如何不起作用的。 @HovercraftFullOfEels 感谢您提供信息丰富的评论。是的,我总是在no
这个词之后提取一个数字。该字符串在其中的其他地方不包含其他“否”字母组合。字符串可能包含其他数字,我不需要提取它们。数字前总是有一个空格,是的,我希望提取的数字总是在字符串的末尾。
感谢您的澄清。我相信您可以理解为什么这些信息应该从一开始就出现在您的问题中。
【参考方案1】:
yourString.substring(yourString.indexOf("no") + 3 , yourString.length());
【讨论】:
您可能应该在末尾添加trim
或将2
替换为3
以获得唯一的数字...并在length
之后添加()
。
也让 .length 成为一个函数调用:.length(),或者它是 barfs【参考方案2】:
你可以试试这个
String example = "ABC Results for draw no 2888";
System.out.println(example.substring(example.lastIndexOf(" ") + 1));
【讨论】:
你应该解释一下【参考方案3】:您总是希望尝试一些易于配置和修改的东西。这就是为什么我总是建议选择 Regex Pattern 匹配而不是其他搜索。
示例,请考虑以下示例:
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);
现在从提供的模式中,我可以轻松识别有用的部分。它可以帮助我识别问题,并且我可以识别模式中对我有用的其他部分(我添加了组名)。
另一个明显的好处是我可以轻松地将这个模式存储在外部配置文件中。
【讨论】:
问题的最佳答案 // 但不是 :( 感谢@YoYo【参考方案4】:你也可以这样做
String demo="ABC Results for draw no 2888";
demo.substring(demo.indexOf("no") + 3)
【讨论】:
【参考方案5】:对于任何愿意使用无处不在的 Apache Commons StringUtils 实现这一目标的人:
String parsed = StringUtils.substringAfter(yourString, "no ");
【讨论】:
以上是关于在特定单词之后从字符串中获取子字符串的主要内容,如果未能解决你的问题,请参考以下文章