【问题标题】:How to separate text from .txt in an Array. JAVA如何在数组中将文本与 .txt 分开。 JAVA
【发布时间】:2014-08-28 16:45:41
【问题描述】:

我正在使用 Java 进行编码,我需要将从 .txt 中获取的文本分隔到数组的不同部分。文本由不同的“文本”组成,如文档集合。 每个文本之前的行类似于:“*TEXT”和一些数字,但我认为,用唯一的单词“*TEXT”可以划分每个文本。 .txt 的示例:

*TEXT 017 01/04/63 PAGE 020
THE ALLIES AFTER NASSAU IN DECEMBER 1960, THE U.S ........
*TEXT 020 01/04/63 PAGE 021
THE ROAD TO JAIL IS PAVED WITH NONOBJECTIVE ART SINCE THE KREMLIN'S SHARPEST BARBS THESE DAYS ARE AIMED AT MODERN ART AND WESTERN ESPIONAGE...
*TEXT 025 01/04/63 PAGE 024
RED CHINA FIXING FRONTIERS RED CHINA PRODUCED A SECOND SURPRISE LAST WEEK...

所以我需要将文本 017 放在数组的某个位置,而下一个位置将是文本 020。 我该怎么做?

这是我如何使用 FileReader 从 .txt 中获取文本的代码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import javax.swing.JFileChooser;

public class Reader{
    public static void main(String args[]){
        File inFile;
        FileReader fr;
        BufferedReader bufReader;
        JFileChooser chooser;

        int reply;
        String doc = "";

        String line;
        try{
            chooser = new JFileChooser();
            reply = chooser.showOpenDialog(null);
            doc = chooser.getCurrentDirectory().getPath() + System.getProperty("file.separator") +
                chooser.getSelectedFile().getName();
            inFile = new File(doc);
            fr = new FileReader(inFile);
            bufReader = new BufferedReader (fr);

            do{
                line = bufReader.readLine();
                if(line ==null )
                    return;
                else{
                    System.out.println(line);
                }
            } while(line!=null);

            bufReader.close();

        }//end try
        catch(Exception e)
        {   System.out.println("error: "+e.getMessage());   }
    }//main
}//end class reader

【问题讨论】:

  • 等待您想要实际的文本?或号码?您的问题使您似乎只想要数组中的 017 或 020 。如果您想要整个文本,那么只需拆分即可。
  • 我想要全文,不好意思英文不太好? ://

标签: java arrays text filereader


【解决方案1】:

您可以将整个文件读入一个字符串,然后使用 String.split(String regex)

【讨论】:

  • 我有一个“line”,它是一个开始的字符串,我可以将它与 String.split 一起使用吗? @克里斯蒂安科斯塔迪诺夫
【解决方案2】:

您可以使用FileUtils 读取文件,然后您可以将其拆分,就像这样

public static void main(String[] args) throws IOException {
    for (String s:FileUtils.readFileToString(new File("/home/leoks/file.txt")).split("\n")){
        if (s.startsWith("*TEXT")) {
            System.out.println(s.split(" ")[1]);
        }
    }
}

或者您可以使用类似的东西编写解析器

http://txt2re.com/index-java.php3?s=*TEXT%20017&-14&-1

【讨论】:

  • 如果我使用你的第一个代码,在“new File()”中我需要把我的整个文本字符串(行)?然后它会单独打印所有“文本”?
  • 向右滚动我的答案,你会看到我被 \n 分割了 :-)
【解决方案3】:

对不起各位,无视我的回答。我输入了它,所以我要离开它,但我认为他只是想要“*TEXT”标识符之后的文本编号。

尝试正则表达式和捕获。

String text = "this will be your document text"
Pattern p = Pattern.compile("(.*TEXT ([0-9]{3}))+.*");
Matcher m = p.matcher(line);
int numCounts = m.groupCount();
String texts[] = new String[numCounts];
for (int i = 1; i <= numCounts; i++) {
   // group(0) is whole match you want each group a 1
   texts[i-1] = m.group(i);  
}
// now they should be in your texts  

或者你可以这样做:

String text = "this will be your document text"
Pattern p = Pattern.compile("TEXT ([0-9]{3})");
Matcher m = p.matcher(line);
ArrayList<String> list = new ArrayList<String>();
while (m.find()) {
  list.add(m.group(1));
}
String texts[] = list.toArray();
// now they should be in your texts  

【讨论】:

  • 不,我不想要“TEXT”后面的数字。我想尝试填充数组,并且在每个位置都有每个文本的字符串(*TEXT)。
【解决方案4】:

试试这个方法

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(
                                           new FileInputStream("yourTextFile")));
StringBuilder br = new StringBuilder();
String newLine ="";
while(true){
   String line = bufferedReader.readLine();
   if(line == null)
      break;
   br.append(line);
}
newLine = br.toString();
String arr[] = newLine.split("\\*TEXT");
System.out.println(java.util.Arrays.toString(arr));

【讨论】:

    猜你喜欢
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 2019-06-16
    • 2023-03-12
    • 2021-06-13
    • 1970-01-01
    相关资源
    最近更新 更多