如何查找非字母字符的位置或单词匹配问题
如:Monday Mondays Wednesday/Friday Tuesday,Wednesday
怎么找出'/'和','的位置,字符串不是固定的,分隔符(非字母)也是不定的
目的就是想将: Monday替换成Mon,Tuesday替换成Tues,Wednesday替换成Wed,Friday 替换成Fri,但若出现类似Mondays,aMonday的不能替换掉,得精确匹配。

解决方案 »

  1.   

    String s = "Monday Mondays Wednesday/Friday Tuesday,Wednesday";找/或,的位置很简单,只要利用String的indexOf方法就可以,比如s.indexOf(','),返回值就是它在字符串中的位置,若返回-1,表示该串中不存在这个字符。
      

  2.   

    正则表达式具体请参考Java Doc文档
      

  3.   

    如果非字母是分隔符的话 就将非字母替换成空格 然后拆解成数组最后在 进行其他操作
    String s="Monday Mondays Wednesday/Friday Tuesday,Wednesday";
    s=s.repalceAll("\\W"," ");
    String s1=s.split(" ");
      

  4.   

     回复人:brooksychen(初晨之阳) ( 二级(初级)) 信誉:100  2007-04-24 14:45:18  得分:0

    String s = "Monday Mondays Wednesday/Friday Tuesday,Wednesday";找/或,的位置很简单,只要利用String的indexOf方法就可以,比如s.indexOf(','),返回值就是它在字符串中的位置,若返回-1,表示该串中不存在这个字符。
    ------------------------------
    同意,
    但楼主说"字符串不是固定的,分隔符(非字母)也是不定的"
    应该是个字符的集合。这种方法工程量可能会变大。
      

  5.   

    替换的话,正则我不太清楚,但对于String的replace方法虽然可以替换,但是不满足你的要求。但我可以提供一个另外的思路:
    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拼起来,如果有必要的话
      

  6.   

    To: john_sheep(彩虹勇士(楼主,没事就把贴子结了吧.)) 抱歉,没看清楚。那这样的话,用正则表达式比较方便。包括我刚刚给出的思路也是一样。
      

  7.   

    服务器上的JDK是1.3的,可以用正则吗To:zhaochunhui(没有烟抽的日子@楼主你看,多么蓝的天,走过去你可以) 字符串不是日期来的,是任意的,上面的只是随便举个例子
    如果非字母是分隔符的话 就将非字母替换成空格,那还原怎么办?
    Monday Mondays Wednesday/Friday Tuesday,Wednesday 
    结果应该是Mon Mondays Wed/Fri Tue,Wed
      

  8.   

    什么意思
    Monday Mondays Wednesday/Friday Tuesday,Wednesday
    这里的/和,还要用到吗?可否把拆解的规律说一下 要是没有规律的话是不好弄的
      

  9.   

    String s = "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开始计数
    }
    //找出非字母的位置
      

  10.   

    服务器上的JDK是1.3的,可以用正则吗
    -----------------------------------这个不能用正则了/*
     * 判断输入字符串是否字母
     */
    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开始的
      }}
      

  11.   

    StringBuffer buffer = new StringBuffer();
    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);