使用replaceAll 正则表达式取代的问题

时间:2020-12-18 18:49:31
现在有字符串String str ="****市黄浦区*******",
我想用正则表示,得到市和区中间的字即得到:黄埔,该怎么做,*代表其他字

6 个解决方案

#1


楼主不用正则也行吧。
str.substring(str.indexOf("市")+1,str.lastIndexOf("区"))
你把可能的情况都说一下。

#2


楼上正解

#3


String result = "";
Pattern p = Pattern.compile("\w*市(\w*)区\w*");
Matcher m = p.matcher(str);
if (m.find()) {
  result = m.group(1);
}

#4


自己实现也挺麻烦的,参考一下吧:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Test {

    public static void main(String[] args) {
        String[] strs = find("****市黄浦区***********市浦东新区*******", '市', '区');
        System.out.println(Arrays.toString(strs));
    }
    
    public static String[] find(String str, char start, char end) {
        if(str == null || str.length() == 0) {
            return new String[0];
        }
        char[] chs = str.toCharArray();
        boolean isStart = false;
        List<String> list = null;
        for(int i = 0, offset = i; i < chs.length; i++) {
            if(chs[i] == start) {
                isStart = true;
                offset = i;
                continue;
            }
            if(isStart && chs[i] == end) {
                list = addSub(list, chs, offset + 1, i - offset - 1);
                continue;
            }
        }
        return toArray(list);
    }
    
    private static List<String> addSub(List<String> list, char[] chs, int start, int end) {
        if(list == null) {
            list = new ArrayList<String>(chs.length / 2);
        }
        list.add(new String(chs, start, end));
        return list;
    }
    
    private static String[] toArray(List<String> list) {
        if(list == null || list.size() == 0) {
            return new String[0];
        }
        return list.toArray(new String[list.size()]);
    }
}

#5


北京游戏公司急聘java游戏开发师

职位描述
1、拥有扎实的JAVA基础,算法基础。
2、熟悉JAVA多线程编程,JAVA网络编程,并有一年以上的全职编程经验。
3、很好的逻辑思维能力与想像力。
4、熟悉MYSQL数据库,熟练使用SQL语句。
5、勤奋好学,对新知识掌握速度快。
6、踏实肯干,能够很好的进行团队合作,和任务多时的加班。
7、热爱游戏,并希望把游戏编程当成自己的事业。
有意者可投简历至:Email: zhongmiaowl@gmail.com

#6


public static void main(String[] args) {

String str = "****市黄浦区*****市黄浦2区*市黄浦3区* ";
Matcher m = Pattern.compile("市(.+?)区").matcher(str);

while (m.find()) {
System.out.println(m.group(1));
}
}

=============
打印:
黄浦
黄浦2
黄浦3

#1


楼主不用正则也行吧。
str.substring(str.indexOf("市")+1,str.lastIndexOf("区"))
你把可能的情况都说一下。

#2


楼上正解

#3


String result = "";
Pattern p = Pattern.compile("\w*市(\w*)区\w*");
Matcher m = p.matcher(str);
if (m.find()) {
  result = m.group(1);
}

#4


自己实现也挺麻烦的,参考一下吧:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Test {

    public static void main(String[] args) {
        String[] strs = find("****市黄浦区***********市浦东新区*******", '市', '区');
        System.out.println(Arrays.toString(strs));
    }
    
    public static String[] find(String str, char start, char end) {
        if(str == null || str.length() == 0) {
            return new String[0];
        }
        char[] chs = str.toCharArray();
        boolean isStart = false;
        List<String> list = null;
        for(int i = 0, offset = i; i < chs.length; i++) {
            if(chs[i] == start) {
                isStart = true;
                offset = i;
                continue;
            }
            if(isStart && chs[i] == end) {
                list = addSub(list, chs, offset + 1, i - offset - 1);
                continue;
            }
        }
        return toArray(list);
    }
    
    private static List<String> addSub(List<String> list, char[] chs, int start, int end) {
        if(list == null) {
            list = new ArrayList<String>(chs.length / 2);
        }
        list.add(new String(chs, start, end));
        return list;
    }
    
    private static String[] toArray(List<String> list) {
        if(list == null || list.size() == 0) {
            return new String[0];
        }
        return list.toArray(new String[list.size()]);
    }
}

#5


北京游戏公司急聘java游戏开发师

职位描述
1、拥有扎实的JAVA基础,算法基础。
2、熟悉JAVA多线程编程,JAVA网络编程,并有一年以上的全职编程经验。
3、很好的逻辑思维能力与想像力。
4、熟悉MYSQL数据库,熟练使用SQL语句。
5、勤奋好学,对新知识掌握速度快。
6、踏实肯干,能够很好的进行团队合作,和任务多时的加班。
7、热爱游戏,并希望把游戏编程当成自己的事业。
有意者可投简历至:Email: zhongmiaowl@gmail.com

#6


public static void main(String[] args) {

String str = "****市黄浦区*****市黄浦2区*市黄浦3区* ";
Matcher m = Pattern.compile("市(.+?)区").matcher(str);

while (m.find()) {
System.out.println(m.group(1));
}
}

=============
打印:
黄浦
黄浦2
黄浦3