字符串模式与美元存在

时间:2014-07-08 07:21:27

标签: java

我在文本文件中包含以下数据。

CS@@NEWSLTR$$                                                                   
RY@@GLMALAW$$                                                                   
VW@@NWL$$                                                                       
VW@@GLS$$                                                                       
IS@@4$$                                                                         
ST@@NJ$$                                                                        
ST@@NY$$                                                                        
SORTX@@0050004018001$$                                                          
RC@@18 No. 4 GLMALAW 1$$                                                        
CR@@18 No. 4 M & A Law. 1$$                                                     
SO3@@The M & A Lawyer$$                                                         
DL@@April, 2014$$                                                               
TI@@DUSTING OFF APPRAISAL RIGHTS: THE DEVELOPMENT OF A NEW INVESTMENT           
 STRATEGY$$

这里我实际上是尝试使用以下代码将这些值提取到java数组中。

package strings;
import com.sun.org.apache.xalan.internal.xsltc.runtime.BasisLibrary;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;

/**
 *
 * @author u0138039
 */
public class Strings {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner inFile1 = null;
        try {
            inFile1 = new Scanner(new File("C:\\Users\\u0138039\\Desktop\\Adhil\\WDA.TP.GLASSER.IB.F486806.A.D140605.T.txt")).useDelimiter("$\\\\\\\\\\\\$");
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Strings.class.getName()).log(Level.SEVERE, null, ex);
        }
        List<String> tokens = new ArrayList<String>();
        while (inFile1.hasNext()) {
            tokens.add(inFile1.nextLine());
        }
        String[] tokenArray = tokens.toArray(new String[0]);
        for (int i = 0; i < tokenArray.length; i++) {
            String s = tokenArray[i];
            System.out.println("a["+i+"]" +tokenArray[i]);

        }
    }
}

这里我的概念是该行以$$结尾,这就是它应该如何存储在数组中,但是当我运行上面的程序时,我得到以下输出。

a[0]CS@@NEWSLTR$$                                                                   
a[1]RY@@GLMALAW$$                                                                   
a[2]VW@@NWL$$                                                                       
a[3]VW@@GLS$$                                                                       
a[4]IS@@4$$                                                                         
a[5]ST@@NJ$$                                                                        
a[6]ST@@NY$$                                                                        
a[7]SORTX@@0050004018001$$                                                          
a[8]RC@@18 No. 4 GLMALAW 1$$                                                        
a[9]CR@@18 No. 4 M & A Law. 1$$                                                     
a[10]SO3@@The M & A Lawyer$$                                                         
a[11]DL@@April, 2014$$                                                               
a[12]TI@@DUSTING OFF APPRAISAL RIGHTS: THE DEVELOPMENT OF A NEW INVESTMENT           
a[13] STRATEGY$$  

此处a[12]a[13]属于相同的数组编号(索引),但这里将其分为2个。

预期输出如下(因为[12]的结尾$$来自[13])

a[0]CS@@NEWSLTR$$                                                                   
a[1]RY@@GLMALAW$$                                                                   
a[2]VW@@NWL$$                                                                       
a[3]VW@@GLS$$                                                                       
a[4]IS@@4$$                                                                         
a[5]ST@@NJ$$                                                                        
a[6]ST@@NY$$                                                                        
a[7]SORTX@@0050004018001$$                                                          
a[8]RC@@18 No. 4 GLMALAW 1$$                                                        
a[9]CR@@18 No. 4 M & A Law. 1$$                                                     
a[10]SO3@@The M & A Lawyer$$                                                         
a[11]DL@@April, 2014$$                                                               
a[12]TI@@DUSTING OFF APPRAISAL RIGHTS: THE DEVELOPMENT OF A NEW INVESTMENT STRATEGY$$ 

请让我知道我哪里出错了以及如何解决。

由于

3 个答案:

答案 0 :(得分:0)

您自然地发出inFile1.nextLine(),[12]和[13]中的字符串将会分开。

我能想到的一种方法是将文件的内容放在String对象中,然后使用&#34; \ $ \ $&#34;进行拆分。

String s = "Hello$$World$$Sample$$";
for(String sa: s.split("\\$\\$")) {
    System.out.println(sa);
}

输出:

Hello
World
Sample

但这不包括尾随&#34; $$&#34;因为你在拆分中使用它。您可以轻松添加字符串结尾,但这只是一种方法。

希望这有帮助。

答案 1 :(得分:0)

    String partialLine = null;
    while (inFile1.hasNext()) {
        String line = inFile1.nextLine();
        if (partialLine != null) {
            line = partialLine + line;
            partialLine = null;
        }
        if (line.endsWith("$$") {
            tokens.add(line);
        } else {
            partialLine = line;
        }
    }
    if (partialLine != null) {
        // Probably empty line.
    }

一些缓冲:不添加部分行(缺少$$),但保留在partialLine

如你所见,甚至可以使用几条部分线条。

答案 2 :(得分:0)

忘记useDelimiter

    List<String> tokens = new ArrayList<String>();
    int next = 0;
    while (inFile1.hasNext()) {
        String line = inFile1.nextLine();
        if( next >= tokens.size() ){
            tokens.add( line );
        } else {
            tokens.set( next, tokens.get(next) + line );
        }                 
        if( line.endsWith( "$$" ) ) next++;
    }