如何从包含搜索字符串的字符串中获取字符序列

How to get a char sequence from String that contains a searched string

我想知道它们是否是 JAVA 中的函数,允许从一个巨大的字符串中检索包含特殊字符的字符序列。

示例:我有一个已字符串化的 php 页面,我检查是否有包含字符“@”的字符序列。如果是这样的话,我只想得到包含搜索到的字符的整个字符序列。

我可以使用 String.contains("@") 来查找字符,但如何获取包含它的字符?

提前致谢!

您可以使用 indexOf and substring 的组合来查找和提取子字符串。

如果没有关于来源和搜索字符串的更多信息,很难进一步帮助您。

您可以使用基于

的正则表达式

"mailto = (test@mail.com)"

如果在字符串化 php 中找到,您可以方便地提取括号内的部分。

但很可能它也可能是 foo@bar.com,因此您可能需要编写更复杂的正则表达式,但它的工作方式相同。

这是一个匹配任何有效电子邮件地址的版本:

"mailto = ([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+(?:\.[A-Za-z]){1,3}\b)"

也许 = 前后的空格不能保证,因此您可以将它们设为可选:

"mailto ?= ?(...)"

要执行匹配,请使用

Pattern pat = Pattern.compile( "mailto = ([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+(?:\.[A-Za-z]){1,3}\b)" );

并且,在字符串中使用 php,然后您可以执行

String php = ...;
Matcher mat = pat.matcher( php );
if( mat.find() ){
    String email = mat.group( 1 );
}

可以重复调用 find 以查找所有匹配项。

有关匹配电子邮件地址的正则表达式的讨论,请参阅 another SO Q+A

既然已经采用了正则表达式的想法,这里有另一种方法

String test = "abc 123 456@789 abcde";
String charToFind = "@";

String strings[] = test.split(" ");
for( String str : strings ){
  if( str.contains(charToFind) ){ System.out.println(str); }
}