如何查找非字母字符的位置或单词匹配问题
如:Monday Mondays Wednesday/Friday Tuesday,Wednesday
怎么找出'/'和','的位置,字符串不是固定的,分隔符(非字母)也是不定的
目的就是想将: Monday替换成Mon,Tuesday替换成Tues,Wednesday替换成Wed,Friday 替换成Fri,但若出现类似Mondays,aMonday的不能替换掉,得精确匹配。
如:Monday Mondays Wednesday/Friday Tuesday,Wednesday
怎么找出'/'和','的位置,字符串不是固定的,分隔符(非字母)也是不定的
目的就是想将: Monday替换成Mon,Tuesday替换成Tues,Wednesday替换成Wed,Friday 替换成Fri,但若出现类似Mondays,aMonday的不能替换掉,得精确匹配。
String s="Monday Mondays Wednesday/Friday Tuesday,Wednesday";
s=s.repalceAll("\\W"," ");
String s1=s.split(" ");
?
String s = "Monday Mondays Wednesday/Friday Tuesday,Wednesday";找/或,的位置很简单,只要利用String的indexOf方法就可以,比如s.indexOf(','),返回值就是它在字符串中的位置,若返回-1,表示该串中不存在这个字符。
------------------------------
同意,
但楼主说"字符串不是固定的,分隔符(非字母)也是不定的"
应该是个字符的集合。这种方法工程量可能会变大。
1、把字符利用StringTokenizer类按照“ ”、“/”、“,”作为分隔符分成String数组(或者ArrayList),记为sa
2、替换前的字符串和替换后的字符串放在一个HashMap里,记为hm,比如Monday和Mon,Monday作为key,Mon作为Value
3、对于数组sa的每个元素sa[i],判断一下这个元素值是否在HashMap对象hm中有相应元素的key与之匹配,有的话就替换成对应的value
4、重复3的操作
5、把替换掉元素之后的sa拼起来,如果有必要的话
如果非字母是分隔符的话 就将非字母替换成空格,那还原怎么办?
Monday Mondays Wednesday/Friday Tuesday,Wednesday
结果应该是Mon Mondays Wed/Fri Tue,Wed
Monday Mondays Wednesday/Friday Tuesday,Wednesday
这里的/和,还要用到吗?可否把拆解的规律说一下 要是没有规律的话是不好弄的
Pattern p = Pattern.compile("[\\W&&\\S]");
Matcher t = p.matcher(s);
while (t.find()) {
System.out.println(t.group()+":"+ t.start());//t.start();就是所在位置,从0开始计数
}
//找出非字母的位置
-----------------------------------这个不能用正则了/*
* 判断输入字符串是否字母
*/
public static boolean isLetter(char str){
String ase="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ";
if(base.indexOf(str)!=-1){
return true;
}else{
return false;
}
//return true;
}
String s1 = "Monday Mondays Wednesday/Friday Tuesday,Wednesday";
for(int i=0;i<s1.length();i++){
if(!isLetter(s1.charAt(i)))){
//非字母的字符(也不是空格),位置在这里也可以得到了,i就是,只不过是从0开始的
}}
buffer.append(" ");
buffer.append("Monday Mondays Wednesday/Friday Tuesday,Wednesday");
buffer.append(" "); Pattern pattern = Pattern.compile("[\\W]Monday[\\W]");
Matcher matcher = pattern.matcher(buffer);
while (matcher.find())
{
buffer.delete(matcher.start() + 4, matcher.start() + 7);
matcher = pattern.matcher(buffer);
} pattern = Pattern.compile("[\\W]Tuesday[\\W]");
matcher = pattern.matcher(buffer);
while (matcher.find())
{
buffer.delete(matcher.start() + 5, matcher.start() + 8);
matcher = pattern.matcher(buffer);
}
buffer.deleteCharAt(0);
buffer.deleteCharAt(buffer.length() - 1);
System.out.println(buffer);