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