本文目錄一覽:
Java編程實現字元串的模式匹配
傳統的字元串模式匹配演算法(也就是BF演算法)就是對於主串和模式串雙雙自左向右,一個一個字元比較,如果不匹配,主串和模式串的位置指針都要回溯。這樣的演算法時間複雜度為O(n*m),其中n和m分別為串s和串t的長度。
KMP 演算法是由Knuth,Morris和Pratt等人共同提出的,所以成為Knuth-Morris-Pratt演算法,簡稱KMP演算法。KMP演算法是字元串模式匹配中的經典演算法。和BF演算法相比,KMP演算法的不同點是匹配過程中,主串的位置指針不會回溯,這樣的結果使得演算法時間複雜度只為O(n+m)。
java 通配符匹配字元串
第一步實現含?而不含*的 字元串匹配,如對dd?的匹配
第二步,實現含有* 的字元串的匹配,如abc* dd?,主要思路是用* split 字元串,分為兩個有效的串,abc, dd?
然後使用步驟一種的方法來查看匹配到的index.
/**
* 找出含?的字元串
* @return
*/
public int checkSubPattern(String src,int begin,String pat){
boolean isFound=true;
if(src.length()-begin pat.length()){return -1;}
for(int i=begin;isrc.length()-pat.length()+1;i++){
for(int j=0;jpat.length();j++){
if(pat.charAt(j)!=’?’ src.charAt(i+j)!=pat.charAt(j)){
isFound =false;
break;
}
isFound = true;
}
if(isFound){return i;}
}
return -1;
}
public boolean checkStar(String src,String pat){
String[] sub_p = pat.split(“\\*”);
int begin =0;
for(int i=0;i sub_p.length;i++){
begin = checkSubPattern(src,begin,sub_p[i]);
System.out.println(begin);
if(begin==-1){return false;}
if(i==0 pat.charAt(i)!=’*’ begin!=0){return false;}
if((i==sub_p.length-1) pat.charAt(i)!=’*’
begin!=(src.length()-
sub_p[i].length())){return false;}
}
return true;
}
java 如何查找匹配的字元和字元串
通過indexOf進行查找
示例:
String str = “abcdefg”;
if(str.indexOf(“cd”)=0){//這裡查找str中是否存在”cd”字元串,如果存在則會返回大於等於0的數,如果不存在,則返回-1
System.out.println(“找到了”);
}
補充indexOf
1、返回 String 對象內第一次出現子字元串的字元位置。
2、string.indexOf(subString[, startIndex])
1)參數
string
必選項。String 對象或文字。
subString 必選項。
要在 String 對象中查找的子字元串。
starIndex 可選項。
該整數值指出在 String 對象內開始查找的索引。如果省略,則從字元串的開始處查找。
2)說明
indexOf 方法返回一個整數值,指出 String 對象內子字元串的開始位置。如果沒有找到子字元串,則返回-1。
java正則匹配一個要求字元串
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexDemo {
private static Pattern pattern;
public static void main(String[] args) {
String source = “abc[javascript|JavaScript|前端用的一個語言|11|12|技術-公司]xyz”;
Matcher matcher = getPattern().matcher(source);
if (matcher.find()) {
System.out.println(“名稱=” + matcher.group(1));
System.out.println(“別名=” + matcher.group(2));
System.out.println(“簡介=” + matcher.group(3));
System.out.println(“關鍵ID=” + matcher.group(4));
System.out.println(“同義ID=” + matcher.group(5));
System.out.println(“類別=” + Arrays.toString(matcher.group(6).split(“-“)));
}
}
private static Pattern getPattern() {
if (pattern == null) {
String start = “\\[“;
String word = “([^\\|]*)”;
String split = “\\|”;
String end = “\\]”;
String regex = start + word + split + word + split + word + split + word + split
+ word + split + “((技術|公司|產品|人物)(\\-(技術|公司|產品|人物)){0,3})” + end;
pattern = Pattern.compile(regex);
}
return pattern;
}
}
正好group1-6對應你要的數據。
java 怎麼匹配含有”.”的字元串
通過indexOf進行查找
示例:
1
2
3
4
String str = “abcdefg”;
if(str.indexOf(“cd”)=0){//這裡查找str中是否存在”cd”字元串,如果存在則會返回大於等於0的數,如果不存在,則返回-1
System.out.println(“找到了”);
}
補充indexOf
1、返回 String 對象內第一次出現子字元串的字元位置。
2、string.indexOf(subString[, startIndex])
1)參數 string
必選項。String 對象或文字。
subString 必選項。
要在 String 對象中查找的子字元串。
starIndex 可選項。
該整數值指出在 String 對象內開始查找的索引。如果省略,則從字元串的開始處查找。
2)說明 indexOf 方法返回一個整數值,指出 String 對象內子字元串的開始位置。如果沒有找到子字元串,則返回-1。
原創文章,作者:SQSOH,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/325299.html