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: 谢谢, 可以的,我在后面再加个逗号隔开就行了
大约 3 年之前 回复
danielinbiti
danielinbiti 回复oElysion: 这例子根据回复需要修改的地方修改后也没问题。
大约 3 年之前 回复
oElysion
oElysion 回复danielinbiti: 我写了另一个例子, 麻烦看下 ,
大约 3 年之前 回复
danielinbiti
danielinbiti 回复oElysion: 把上面for循环改一下就行了。for(int i=1;i<arr.length-1;i=i+2){
大约 3 年之前 回复
oElysion
oElysion 回复danielinbiti: 我可能没表达清楚,如果@从0开始那么每2个为一对,01,23,45这样, 我需要一对@之间的字符
大约 3 年之前 回复
danielinbiti
danielinbiti 回复oElysion: @2015@年@7@月@15@日 年,月不都是之间的吗?没看懂
大约 3 年之前 回复
oElysion
oElysion 你好, 亲测不管用, 我只需要@@中的字符,比如a只需要2015和7和15
大约 3 年之前 回复
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
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java 字符串截取的几种方式
众所周知,java提供了很多字符串截取的方式。下面就来看看大致有几种。 1.split()+正则表达式来进行截取。 将正则传入split()。返回的是一个字符串数组类型。不过通过这种方式截取会有很大的性能损耗,因为分析正则非常耗时。String str = "abc,12,3yy98,0"; String[] strs=str.split(","); for(int i=0,len=strs.
java中字符串截取,调用substring()方法
substring() 方法返回字符串的子字符串。在java中 substring()方法有两种用法, 第一种 public String substring(int beginIndex) 第二种 public String substring(int beginIndex, int endIndex) 参数的意思 beginIndex -- 起始索引
java 字符串截取工具类
java 字符串截取工具类java 字符串截取工具类
java 字符串截取的三种方法(推荐)
1.split()+正则表达式来进行截取。 将正则传入split()。返回的是一个字符串数组类型。不过通过这种方式截取会有很大的性能损耗,因为分析正则非常耗时。 String str = "abc,12,3yy98,0"; String[] strs=str.split(","); for(int i=0,len=strs.length;i<len;i++){ System.out
java字符串常用操作(查找、截取、分割)
public class 字符串常用操作 { public static void main(String[] args) { /* * 查找子串 */ String str1="dwqae12232aebdalf"; //查找指定字符第一次出现的位置 int first1=str1.index
java String 中文 字符串 截取
/**      * @param len      *            需要显示的长度(注意:长度是以byte为单位的,一个汉字是2个byte)      * @param symbol      *            用于表示省略的信息的字符,如“...”,“>>>”等。      * @return 返回处理后的字符串      */     public stati
String字符串截取的四种方式
import java.util.StringTokenizer; import java.util.regex.Pattern;import org.junit.Test;public class TestStringToken { @Test public void subSting() { String str = "java,javac,javae";
java获取文件名, 提取字符串中局部字符串。拆分文件名及后缀
String name = "upload.java"; // 注:name的值是动态的 这里只是假设已知。 // 获取后缀名 String sname = name.substring(name.lastIindexOf(".")); String fileName=name.substring(0,name.lastindexOf("."));即可//获得upload部分
将很长的String截取为多个小段字符串
有时候我们想要把一些数据保存道数据库,但是由于数据过长,导致保存到数据库会导致一些问题。 因此我们一般都会选择将字符串截取成一些较短的字符串。为了方便一些需要的同学,也为了记录 自己的学习过程,便自己简单写了一个截取字符串的工具类。仅仅为提供一些参考。package com.liao.utils; import java.util.ArrayList; import java.util.Li
java 截取字符串最后几位
private static String RightSubstring(String s, int num) {   String snew = StringUtils.trimToEmpty(s);   if(snew == null)     return "";   else if(snew.length()>num)     return snew.substring(snew