2 oelysion oElysion 于 2015.07.15 16:00 提问

java String字符串截取

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

7个回答

danielinbiti
danielinbiti   Ds   Rxr 2015.07.15 16:15
已采纳
 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);
    }
oElysion
oElysion 回复danielinbiti: 谢谢, 可以的,我在后面再加个逗号隔开就行了
2 年多之前 回复
danielinbiti
danielinbiti 回复oElysion: 这例子根据回复需要修改的地方修改后也没问题。
2 年多之前 回复
oElysion
oElysion 回复danielinbiti: 我写了另一个例子, 麻烦看下 ,
2 年多之前 回复
danielinbiti
danielinbiti 回复oElysion: 把上面for循环改一下就行了。for(int i=1;i<arr.length-1;i=i+2){
2 年多之前 回复
oElysion
oElysion 回复danielinbiti: 我可能没表达清楚,如果@从0开始那么每2个为一对,01,23,45这样, 我需要一对@之间的字符
2 年多之前 回复
danielinbiti
danielinbiti 回复oElysion: @2015@年@7@月@15@日 年,月不都是之间的吗?没看懂
2 年多之前 回复
oElysion
oElysion 你好, 亲测不管用, 我只需要@@中的字符,比如a只需要2015和7和15
2 年多之前 回复
faketrue11
faketrue11   2015.07.15 21:41

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); 
    }
} 

}

oElysion
oElysion   2015.07.15 16:26

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

yuke198907
yuke198907   2015.07.15 17:01

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

u014720700
u014720700   2015.07.15 22:06
  • 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;
    

    }




u014720700
u014720700   2015.07.15 22:07
 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;
    }

重新发下 代码页点错

crcgio
crcgio   2015.07.18 13:09

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

Csdn user default icon
上传中...
上传图片
插入图片