各位兄弟,大家好。 
我有个问题想问你们 ,急死了。
是这样的。 有个.txt文件,我现在需要解析这个文件。得到值。
里面是这样的。假如有aa,bb,2个值。
里面应该是 :    aa!@bb!@   如果是空的话,假如就aa,  
里面应该是 :    aa!@!@空的话,中间就什么也不加! 它们的分隔符用!@我现在怎么得到aa,bb的值, 怎么判断 !@ 跟!@之间没有值啊?
请指教~~ 谢谢了。

解决方案 »

  1.   

    String 有个spilt的方法不知道是不是楼主想用的
      

  2.   

    楼上的 你不明白嘛?
    我说的很清楚了。
    就是一个.txt文件里,怎么判断 !@ 跟!@之间没有值假如 正常的是:  aa!@bb!@    这个是标准情况下它有可能是:  aa!@!@  那我想得到bb="" 这样 !
      

  3.   

    public static void main(String[] args) throws  Exception {
    String s="aa!@bb!@";
    String[] arr=s.split("!@");
    for(String t:arr){
                        if(!"".equals(t)){
    System.out.println(t);
                         }
    }
    }
      

  4.   

    举个例子给你吧。
    String str = "aa!@!@";
    String[] ss =str.split("!@");
    此时ss只包含一个"aa"字符,因为两个"!@"之间并没有任何东西。
    这种方式不能直接用来处理太大的字符串,文件小的话应该还是比较用的。
    可以根据文件结构来做一个变通。
      

  5.   

      XXX.split("!@")
      不是可以得到一个字符串数组吗?
      

  6.   


    String string="aa!@bb!@!@qq!@";
    String [] strings = string.split("!@");
    System.out.println(strings.length);
    for(String s:strings){
    System.out.println("****"+s+"****");
    }
      

  7.   

    String testString = readLine();
    testString.split("!@");就是读一行然后分隔一下不就行了吗?
    还有什么特殊的需求吗?
      

  8.   

    晕了,你这是判断没有值,你在帖子里先说的是得到aa,bb的值
      

  9.   


    lz应该是希望bb也要有个""值
    所以split应该要两个参数split("!@", -1)
      

  10.   

    public static void main(String[] args) { 
    String str2 = "aa!@!@"; String[] strArray2 = str2.split("!@", -1);

    System.out.println(strArray2.length); for(String s : strArray2){
    if ("".equals(s))
    System.out.print("null");//会打印出2个null,最后一个null是字符串末尾的null,可以去掉。
    System.out.print(s +" ");
    }
    }
      

  11.   

    你说的是属性配置文件吗?和xml一样属于配置文件,需要解释里面的东西吗?
      

  12.   

    或者如果你要打印出"",那么把上面的输出替换成:
    System.out.print("\"\"");
      

  13.   

    split("!@",0);split还有一个方法有2个参数,你用用看。
      

  14.   


    String[] arr=s.split("(!@)+");
    可以只得到非空的值放在数组中.
      

  15.   

    ee!@aaaaa!@bbbbb!@!@!@20100909!@!@yy_wldm!@!@汽车!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@tt!@!@!@!@
    假如 .txt有这么一行数据。我现在要得到值。
    如果!@跟!@之间 什么也没有的话 就输出“”.  怎么做?? 
    各位大侠!
      

  16.   

    还是不太明白楼主是说,“!@”这个字符串是一个分隔符吗?
    用于分隔字符串还有,分隔符分开的一定是 aa 和 bb 吗,不会有别的字符?要不要考虑换行?最后,你的程序希望得到什么样的输出?是字符串、字符串数组还是一个List?比如字符串是:
    aa!@bb!@!@!@aa!@aa!@bb!@test!@3333333!@
    abcdefg!@sssssss!@vvvvv!@!@!@!@输出的应该是什么?
      

  17.   

    try this:String source = "ee!@aaaaa!@bbbbb!@!@!@20100909!@!@yy_wldm!@!@汽车!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@tt!@!@!@!@";System.out.println(source.replaceAll("!@", ""));
      

  18.   

    测试文件:d:test.txt;
    test.txt中的内容是
    aa!@bb!@
    aa!@!@import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    public class FileChannelTest {
    public static void main(String[] args) throws IOException{
    String path = "D:\\test.txt";
    BufferedReader in=new BufferedReader(new FileReader(path));
    String str;
    Pattern pattern=Pattern.compile("(?<=!@)(?=!@)");
    Matcher matcher=null;
    while((str=in.readLine())!=null){
    matcher=pattern.matcher(str);
    if(matcher.find())
    System.out.println("只有a值,没有b值");
    else
    System.out.println("a和b都有值");
    }
    in.close();
    }}
      

  19.   


    输出:aa,bb,"","",aa,aa,bb,test,3333333,
    abcdefg,sssssss,vvvvv,"","","",
      

  20.   

    String str="ee!@aaaaa!@bbbbb!@!@!@20100909!@!@yy_wldm!@!@汽车!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@tt!@!@!@!@";
    str=str.replaceAll("(?<=!@)(?=!@)"," ");//在两个连续的!@之间插入一下空格.
    System.out.println(str);
    String[] result=str.split("(!@)+");
    System.out.println(Arrays.toString(result));
      

  21.   

    str=str.replaceAll("(? <=!@)(?=!@)","\\"\\"");//在两个连续的!@之间插入一对"". 
      

  22.   

    上面不对,应该:
    str=str.replaceAll("(? <=!@)(?=!@)","\"\"");//在两个连续的!@之间插入一对"". 
      

  23.   

    String source = "ee!@aaaaa!@bbbbb!@!@!@20100909!@!@yy_wldm!@!@汽车!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@tt!@!@!@!@";
    String text = source;
    String sep = "!@";

    String pre = "";
    while(true){
    int index = text.indexOf(sep);
    if(index < 0){
    System.out.print(text);
    break;
    }

    String pice = text.substring(0, index);
    text = text.substring(index + 2);

    System.out.print(pre);
    System.out.print(pice);
    pre = ",";
    }
      

  24.   

    String source = "ee!@aaaaa!@bbbbb!@!@!@20100909!@!@yy_wldm!@!@汽车!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@tt!@!@!@!@";
    String text = source;
    String sep = "!@";String pre = "";
    while(true){
    int index = text.indexOf(sep);
    if(index < 0){
    System.out.print(text);
    break;
    }

    String pice = text.substring(0, index);
    text = text.substring(index + 2);

    System.out.print(pre);
    System.out.print(pice);
    pre = ",";
    }
    经测试应该可以达到楼主要求但这种做法必须一次性把字符串全部读入内存,然后再进行分析。如果文本文件太大,则这个办法可行性不高
      

  25.   

    public static void main(String[] args) { 
    String str = "ee!@aaaaa!@bbbbb!@!@!@20100909!@!@yy_wldm!@!@汽车!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@tt!@!@!@!@"; String[] strArray = str.split("!@", -1);

    System.out.println(strArray.length); for(int i=0; i<strArray.length-1; i++){
    if ("".equals(strArray[i]))
    System.out.print("\"\"");
    System.out.print(strArray[i] +" ");
    }
    }
    输出:
    29
    ee aaaaa bbbbb "" "" 20100909 "" yy_wldm "" 汽车 "" "" "" "" "" "" "" "" "" "" "" "" "" "" tt "" "" "" 
      

  26.   


    public class Test {
        public static void main(String[] args) {        String test1 = "ee!@aaaaa!@bbbbb!@!@!@20100909!@!@yy_wldm!@!@汽车!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@tt!@!@!@!@";        String[] test1Strings = test1.split("!@", -1);        for (int i = 0; i < test1Strings.length - 1; i++) {
                // 如果格式肯定是x!@x!@[email protected]!@,由于尾部是!@则最后产生的字符串数组一定会多一个"",所以长度要减1
                System.out.println(test1Strings[i]+"空");
            }
        }
    }
      

  27.   

    "aa!@!@".split("@!", -1)
    这样就好用了。楼主试试。如假包换
      

  28.   

    晕了,怎么向是从你那copy的,去了下WC,回来就晚了,还是上厕所想的呢,呵呵~~
      

  29.   

    看看 JDK中的 分割String字符串方法 split