我有一个带有特殊字符的字符串(数字)。我想搜索一个子串(仅包含数字)&我也想检测起始指数&字符串中匹配子字符串的结束索引。
例如:主字符串:(+ 91)-1231212 1231
要搜索的子字符串: 1212
目前我使用以下代码执行此操作,但代替 1212 ,它搜索 12312 。对于其他情况,它工作正常。
String sss0 = "1212";
String sss1 = "(+91)-1231212 1231";
sss0 = sss0.replaceAll("[^\\d]","");
System.out.println("*************************"+sss0);
String ptn = "" + sss0.charAt(0);
for(int jj=0; jj<sss0.length()-1; jj++){
ptn += "[^" + sss0.charAt(jj) + sss0.charAt(jj+1) + "]*?" + sss0.charAt(jj+1);
}
System.out.println("ptn: " + ptn);
Pattern p300 = Pattern.compile(ptn);
Matcher m300 = p300.matcher(sss1);
if(m300.find()){
System.out.println("start, stop: " + m300.start() + "," + (m300.end()-1 ));
System.out.println("substring: " + sss1.substring(m300.start(), m300.end()));
}
请帮帮我。提前谢谢。
答案 0 :(得分:0)
试试这个:
int start = sss1.indexOf(sss0);
if(start != -1) {
System.out.println("Start : " + start);
System.out.println("End : " + start.length()); //maybe add +1 here depending on what you mean by end index.
}
你也可以将它放在循环中以查找子串的所有出现。
答案 1 :(得分:0)
伪代码:
pattern = ""
foreach char c in sss0:
pattern += c + "[^0-9]*"
found_substring = match(pattern, sss1)
这个想法是用您愿意跳过的模式散布您正在寻找的文字字符。