本文目錄一覽:
如何java讀取海量中文文本
使用Boyer-Moore算法
或者使用KMP算法
建議使用後者
KMP算法(java)
public class KMP {
/**
* @param args
*/
//計算模式串的next值
public static void getNext(String strModel, int dNext[]){
int i = 0,j = 1;
dNext[1] = 0;
while(j strModel.length()){
while(i 0 strModel.charAt(i) != strModel.charAt(j))//遞推
i = dNext[i];
i++;
j++;
if(j == strModel.length())
break;
if(strModel.charAt(j) == strModel.charAt(i))//得出next值
dNext[j] = dNext[i] + 1;
else
dNext[j] = i;
}
}
//利用next值查詢子串
public static int getSubString(String strMain, String strModel, int dStart){
int dPos = -1;
int i = dStart;
int j = 1;
int dNext[] = new int[200];
getNext(strModel, dNext);
while(istrMain.length()){
if(strMain.charAt(i) == strModel.charAt(j)){//當前字符匹配
if(j == (strModel.length()-1)){//查找成功
dPos = i – j + 1;
break;
}
i++;
j++;
}
else{//當前字符不匹配
if(dNext[j] == 0){
i++;
j = 1;
}
else{
j = dNext[j];
}
}
}
return dPos;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String strModel = ” jlsdjflskjdm”;
int[] dNext = new int[20];
getNext(strModel, dNext);
for(int i = 1; istrModel.length(); i++)
System.out.print(dNext[i] + ” “);
String strMain = ” aaaaaaaaaaabbbcdabbksfjlsdjflskjd”;
System.out.println();
System.out.println(getSubString(strMain, strModel, 1));
}
}
java怎麼把字符串中的的漢字取出來
1.判斷字符串是否全是漢字。
String str1 = “java判斷是否為漢字”
String str2 = “全為漢字”
String reg = “[\\u4e00-\\u9fa5]+”
boolean result1 = str1.matches(reg)//false
boolean result2 = str2.matches(reg)//true
2.提取字符串中的漢字。
String str = “java怎麼把asdasd字符串中的asdasd的漢字取出來”
String reg = “[^\u4e00-\u9fa5]”
str = str.replaceAll(reg, ” “)
System.out.println(str)
3.判斷字符串中是否含有漢字。
boolean result = (str.length() == str.getBytes().length)//true:無漢字 false:有漢字
4.獲取字符串中漢字的個數。
int count = 0
String reg = “[\\u4e00-\\u9fa5]”
String str = “java獲取漢字Chinese的個數”
Pattern p = Pattern.compile(reg)
Matcher m = p.matcher(str)
while (m.find()) {for (int i = 0; i = m.groupCount(); i++) {count = count + 1}}
System.out.println(“共有漢字 ” + count + “個 “)
java怎麼把字符串中的的漢字取出來?
1.判斷字符串是否全是漢字。
String str1 = “java判斷是否為漢字”
String str2 = “全為漢字”
String reg = “[\\u4e00-\\u9fa5]+”
boolean result1 = str1.matches(reg)//false
boolean result2 = str2.matches(reg)//true
2.提取字符串中的漢字。
String str = “java怎麼把asdasd字符串中的asdasd的漢字取出來”
String reg = “[^\u4e00-\u9fa5]”
str = str.replaceAll(reg, ” “)
System.out.println(str)
3.判斷字符串中是否含有漢字。
boolean result = (str.length() == str.getBytes().length)//true:無漢字 false:有漢字
4.獲取字符串中漢字的個數。
int count = 0
String reg = “[\\u4e00-\\u9fa5]”
String str = “java獲取漢字Chinese的個數”
Pattern p = Pattern.compile(reg)
Matcher m = p.matcher(str)
while (m.find()) {for (int i = 0; i = m.groupCount(); i++) {count = count + 1}}
System.out.println(“共有漢字 ” + count + “個 “)
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/307268.html