Java 在文本中搜索特殊字符串的最佳方法
如果我有一段3000个字符左右的文字。我希望搜索具有特定特征的字符串,例如Java 在文本中搜索特殊字符串的最佳方法,java,string,algorithm,search,text,Java,String,Algorithm,Search,Text,如果我有一段3000个字符左右的文字。我希望搜索具有特定特征的字符串,例如[*]之类的字符串 也就是说,我想从中获取[a]和[bc] sjfhshdkfjhskdhfksdf[a]sfdsgfsdf[bc] 我知道有一种叫做KMP的算法,可以保证在文本中进行线性时间搜索操作,但是这里我没有固定的字符串,也许我必须在某个地方使用一些正则表达式 我怎样才能比O(n^2)做得更好?如果我使用java,是否有一些轻量级的库呢?不需要库,您已经有效地描述了regex的一个用例!它们针对搜索进行了高度优化
[*]
之类的字符串
也就是说,我想从中获取[a]
和[bc]
sjfhshdkfjhskdhfksdf[a]sfdsgfsdf[bc]
我知道有一种叫做KMP的算法,可以保证在文本中进行线性时间搜索操作,但是这里我没有固定的字符串,也许我必须在某个地方使用一些正则表达式
我怎样才能比O(n^2)做得更好?如果我使用java,是否有一些轻量级的库呢?不需要库,您已经有效地描述了regex的一个用例!它们针对搜索进行了高度优化,在本例中,它们将是
String str=“sjfhshdkfjhskdfkskfksdfksdf[a]sfdsgfsdf[bc]”;
List allMatches=new ArrayList();
Matcher m=Pattern.compile(“\\[^\\]]*]”)。Matcher(str);
while(m.find()){
添加(m.group());
}
如果你有任何疑问,并且真的想要一些你能看到的O(n),这里有一个算法:
String str = "sjfhshdkfjhskdhfksdf[a]sfdsgfsdf[bc]";
List<String> allMatches = new ArrayList<>();
for (int i = str.indexOf('['), j; i != -1; i = str.indexOf('[', j + 1)) {
j = str.indexOf(']', i + 1);
// if `j` is -1, the brackets are unbalanced. Perhaps throw an Exception?
allMatches.add(str.substring(i, j + 1));
}
String str=“sjfhshdkfjhskdfkskfksdfksdf[a]sfdsgfsdf[bc]”;
List allMatches=new ArrayList();
对于(inti=str.indexOf('['),j;i!=-1;i=str.indexOf('['),j+1)){
j=str.indexOf(']',i+1);
//如果'j'为-1,则括号不平衡。是否引发异常?
添加(str.substring(i,j+1));
}
以下是一行操作方法:
String[] hits = str.replaceAll("^.*?\\[|][^\\]]*$", "").split("].*?\\[");
其工作原理是剥离第一个/最后一个开/关方括号内的前导和尾随字符,然后在一个关方括号上拆分到下一个开方括号(包括).Nice!你对性能有信心吗?懒惰量词似乎可以改进。@4castle性能?我猜这将在10微秒左右执行,这“足够快”。但想想开发人员的性能。更少的代码意味着更少的bug,更少的编写时间。
String[] hits = str.replaceAll("^.*?\\[|][^\\]]*$", "").split("].*?\\[");