我在文本文件中包含以下数据。
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$$
请让我知道我哪里出错了以及如何解决。
由于
答案 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++;
}