Java 如何使用word从字符串中获取子字符串以一些文本开头

Java 如何使用word从字符串中获取子字符串以一些文本开头,java,Java,我试图用一些起始文本从字符串中读取单词。比如说 String str=“Ads:234983 ABCD2987423可用” 在上面的示例中,该值每次都会更改。所以我想读以文本“ABCD”开头的字符串。i、 e(ABCD2987423) 注意:有时会在字符串中添加额外的文本,因此在本例中索引不起作用。您可以使用正则表达式对一行代码使用string\replaceAll: String str = " Ads : 234983 ABCD2987423 available"; String text

我试图用一些起始文本从字符串中读取单词。比如说

String str=“Ads:234983 ABCD2987423可用”

在上面的示例中,该值每次都会更改。所以我想读以文本“ABCD”开头的字符串。i、 e(ABCD2987423)

注意:有时会在字符串中添加额外的文本,因此在本例中索引不起作用。

您可以使用正则表达式对一行代码使用
string\replaceAll

String str = " Ads : 234983 ABCD2987423 available";
String text = str.replaceAll(".*\\b(ABCD\\w*)\\b.*", "$1");
System.out.println(text);
这张照片是:

ABCD2987423

另一种解决办法。使用流但不使用正则表达式

将字符串拆分为一个单词数组,然后选择以ABCD开头的第一个单词

String[] words = " Ads : 234983 ABCD2987423 available".split(" ");
String foundWord = Stream.of(words).filter(w -> w.startsWith("ABCD")).findFirst().get();

注意:如果输入中没有以“ABCD”开头的单词,则在调用
get()
时,
findFirst
生成的可选项抛出
NoSuchElementException
,如果您计划频繁使用该选项,则可以使用
RegExp

public final class AbcdExtractor implements Function<String, String> {

    private final Pattern pattern = Pattern.compile("(?<abcd>ABCD\\d+)");

    public String apply(String str) {
        Matcher matcher = pattern.matcher(str);
        return matcher.find() ? matcher.group("abcd") : null;
    }

}

如果要读取以文本“ABCD”开头的字符串,其前面是空白字符,或者可以位于字符串的开头,后面只能是空白字符或字符串的结尾,则可以使用

输出将仅与第一个匹配

ABCD2987423

谢谢你,蒂姆。为表达式提供以下错误消息-无效的转义序列(有效的是\b\t\n\f\r\“\”\)@daithashankar可能会重新加载您的页面。我的答案中的代码不起作用(我测试了它)。为什么不将
.findFirst().get()
替换为
.findFirst().orElse(null)
避免异常?这是另一种选择。这取决于如果找不到该字符串会发生什么。这是错误吗?然后在异常中处理它。或者在这种情况下,
null
是预期的返回值吗?
(?<!\S)ABCD\w*(?!\S)
String regex = "(?<!\\S)ABCD\\w*(?!\\S)";
String string = "Ads : 234983 ABCD2987423 availabe\n"
     + "Ads : 234983 #ABCD2987423 availabe\n"
     + "Ads : 234983 ABCD2987423# availabe\n"
     + "Ads : 234983 #ABCD2987423# availabe";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println(matcher.group(0));
}
ABCD2987423