java String字符串截取

比如这样一个字符串
String a = "你好,今天是@2015@年@7@月@15@日";
String b = "时间为@16@@:@@05@";
怎么样截取2个一对的@中间的字符串 a = 2015,7,15 b = 16,:,05

 public static String getResult(String str,String splitStr){
        String[] arr = ("1"+str+"1").split(splitStr);
        StringBuilder sd = new StringBuilder();
        for(int i=1;i<arr.length-1;i++){
            sd.append(arr[i]);
        }
        return sd.toString();
    }
    public static void main(String[] args) {
        String a = "你好,今天是@2015@年@7@月@15@日";
        String b = "时间为@16@@:@@05@";
        a = getResult(a,"@");
        b = getResult(b,"@");
        System.out.println("a="+a);
        System.out.println("b="+b);
    }

另一个例子
你好,请你明天@15@点到@XXXX地点@等我,我有@XXXX事情@和你说, 我需要的是 15 XXXX地点 XXXX事情

String [] str = a.split("@")分割吧

import java.util.regex.Pattern;

public class Demo {

private static final String REGEX = "\@[^@]+@"; 
private static final String a = "你好,今天是@2015@年@7@月@15@日";
private static final String b = "时间为@16@@:@@05@";

public static void main(String[] args) { 
    Pattern p = Pattern.compile(REGEX); 
    String[] items = p.split(a); 
    for(String s : items) { 
        System.out.println(s); 
    } 
    String[] items = p.split(b); 
    for(String s : items) { 
        System.out.println(s); 
    }
} 

}

  • public static void main(String[] args) {
    // TODO Auto-generated method stub
    String a = "你好,今天是@2015@年@7@月@15@日";
    String b ="时间为@16@@:@@05@";
    a=getStrBySplit(a, "@");
    b=getStrBySplit(b, "@");
    System.out.println(a);
    System.out.println(b);
    }

    public static String getStrBySplit(String str,String str1){
    StringBuilder sb=new StringBuilder();
    List list1=new ArrayList();
    //获取每个@在字符串里的索引
    for (int i = 0; i < str.length(); i++) {
    char item=str.charAt(i);

        if(str1.equals(String.valueOf(item))){
    
            list1.add(i);
        }
    }
    //每两个索引存放一次
    List<Map<String,Integer>> list2=new ArrayList();
    Map map=new HashMap();
    int j=0;
    for (int i = 0; i < list1.size(); i++) {
        j+=1;
        map.put(String.valueOf(j), (Integer)list1.get(i));
        if(j==2){
            list2.add(map);
            j=0;
            map=new HashMap();
        }
    }
    //截取和拼接
    for (Map map1 : list2) {
        String substring = str.substring(((Integer)map1.get("1"))+1,(Integer)map1.get("2"));
        sb.append(substring);
        sb.append(",");
    }
    str = sb.toString().substring(0,sb.toString().length()-1);
    
    return str;
    

    }




 public static void main(String[] args) {
        // TODO Auto-generated method stub
         String a = "你好,今天是@2015@年@7@月@15@日";
         String b ="时间为@16@@:@@05@";
         a=getStrBySplit(a, "@");
         b=getStrBySplit(b, "@");
         System.out.println(a);
         System.out.println(b);
    }

    public static String getStrBySplit(String str,String str1){
        StringBuilder sb=new StringBuilder();
        List list1=new ArrayList();
        //获取每个@在字符串里的索引
        for (int i = 0; i < str.length(); i++) {
            char item=str.charAt(i);

            if(str1.equals(String.valueOf(item))){

                list1.add(i);
            }
        }
        //每两个索引存放一次
        List<Map<String,Integer>> list2=new ArrayList();
        Map map=new HashMap();
        int j=0;
        for (int i = 0; i < list1.size(); i++) {
            j+=1;
            map.put(String.valueOf(j), (Integer)list1.get(i));
            if(j==2){
                list2.add(map);
                j=0;
                map=new HashMap();
            }
        }
        //截取和拼接
        for (Map map1 : list2) {
            String substring = str.substring(((Integer)map1.get("1"))+1,(Integer)map1.get("2"));
            sb.append(substring);
            sb.append(",");
        }
        str = sb.toString().substring(0,sb.toString().length()-1);

        return str;
    }

重新发下 代码页点错

楼上的一个个麻烦的要死,用split(“@”),来截取,debug一下看你要的数据在什么位置,然后a[i]就能取到你想要的值,然后拼接一下就ok