【问题标题】:java first word in text outputjava文本输出中的第一个单词
【发布时间】:2014-12-10 08:10:32
【问题描述】:

我正在尝试从我的 100k+ 单词词典中读取第一个单词,我是 java 新手,所以请放过我 :D

字典看起来像这样:

naklestite  naklestiti  Ggdvdm  0
nakljuÄŤiti nakljuÄŤiti Ggvn    1
nakljuÄŤit  nakljuÄŤiti Ggvm    0
nakljuÄŤil  nakljuÄŤiti Ggvd-em 0

我需要复制新 .txt 文件中的所有第一个单词以获得如下输出:

naklestite  
nakljuÄŤiti 
nakljuÄŤit  
nakljuÄŤil

到目前为止,我将整行作为输出而不是第一个单词。

package test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class moja {

    public static void main(String[] args) {
        try {
            File file = new File("SloveneLexicon.txt");
            FileReader fileReader = new FileReader(file);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            StringBuffer stringBuffer = new StringBuffer();
            String word;
            while ((word = bufferedReader.readLine()) != null) {

                String s = word;
                String[] fragments = s.split(" ");
                String firstColumn = fragments[0];
                System.out.println(firstColumn);
            }
            bufferedReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

【问题讨论】:

  • 为什么不将片段[0]写入新文件
  • 使用FileWriter + BufferedWriter 写入文件:)
  • 首先我只想获得输出,然后我将处理写入新文件
  • @RokIvartnik 那么发生了什么错误?
  • 我将整行作为输出

标签: java


【解决方案1】:

问题来了

String[] fragments = s.split(" ");

你试图用 " " 单个空格来分割,但单词之间没有完全的空格。你得到了整行,因为单词之间没有单独的空格来分割

naklestite  naklestiti  Ggdvdm  0
nakljuÄŤiti nakljuÄŤiti Ggvn    1
nakljuÄŤit  nakljuÄŤiti Ggvm    0
nakljuÄŤil  nakljuÄŤiti Ggvd-em 0

大多数单词之间有“”2个空格,并且有3个空格以及1个空格。没有被授予者是单个空格或2个空格。你想要做的是用white spaces而不是空格来分割单词。这会将单词分割成一个或多个连续的空格。

所以你必须改变这一行

String[] fragments = s.split(" "); 

String[] fragments = s.split("\\s+");

this.then 你会得到正确的输出

输出>>

naklestite
nakljuÄŤiti
nakljuÄŤit
nakljuÄŤil

【讨论】:

    【解决方案2】:

    好的,我们有了Find PID of process that use a port on Windows 的基础,您现在有了代码的初稿。

    如果您告诉我上面的代码将输出文档的整行而不是其“第一”列,我能想象的唯一原因是您的单词之间的空格不像您使用空格键生成的空格一个键盘(但可能是一个“隐形”标志或类似的东西)。

    你的文件是这样的吗:

    naklestite naklestiti Ggdvdm 0
    nakljuÄŤiti nakljuÄŤiti Ggvn 1
    

    我会这样描述:

    <wordVariableLength><Blank><WordVariableLength><Blank><WordVariableLength><Number><EOL>
    

    还是更多这样的?

    naklestitenaklestitiGgdvdm0nakljuÄŤitinakljuÄŤitiGgvn1
    

    当您处理输入文件的行并拥有:

    System.out.println(word);
    System.out.println("check");
    

    会导致这样的输出吗?:

    naklestite naklestiti Ggdvdm 0
    check
    nakljuÄŤiti nakljuÄŤiti Ggvn 1
    check
    ...
    

    只要你甚至不能“选择一列”你的原始输入,我认为很难进一步帮助你:(

    【讨论】:

    • 实际上它看起来像这样:东西 daijf 20310 如果这有什么不同?那么超过 1 个空间公寓?正如我所说,我是新手
    • 是的,如果用一两个空格正确分隔“列”,这很重要。但是,上面的代码不应打印出所述文件的整行,除非其中的格式超出我对您的描述的预期
    • 您可以将文件发送到任何服务,如垃圾邮件.de 并告诉我地址​​,以便我可以获取文件(或将其上传到某处或我知道什么)然后我看看它(午饭后)。
    • sourceforge.net/projects/obeliks/files/Resources/… 现在要去上班,所以稍后或明天回复,谢谢您的帮助
    • “Windows上的Pid进程”的链接是什么?
    最近更新 更多