【问题标题】:Java File Parsing - Go word by wordJava 文件解析 - 逐字逐句
【发布时间】:2018-07-21 10:04:37
【问题描述】:

我有一个文件内容如下:

示例.txt: 嗨,我的名字是约翰 我是一名工程师。你好吗

我想要的输出是一个字符串数组列表,例如 [Hi,my,name,is,john,and,I,am,an,engineer,.,How,are,you]

标准的 java 函数将其解析为行,我会得到一个包含行的数组。我对应该使用哪种方法来获得以下输出感到困惑。

感谢任何帮助。

【问题讨论】:

    标签: java file string-parsing


    【解决方案1】:

    .nextLine() 将得到一整行,但.next() 将逐字逐句

    【讨论】:

    • 感谢@Mitchel0022的建议
    【解决方案2】:

    如果您将字符串作为整行获取,但只需要单词,则可以在单词上使用.split(" "),因为这将返回一个包含单个单词且没有空格的数组。如果您想在文件读取中执行此操作,可以使用类似以下内容...

    public ArrayList<String> readWords(File file) throws IOException {
      ArrayList<String> words = new ArrayList<String>();
      String cLine = "";
      BufferedReader reader = new BufferedReader(new FileReader(file));
      while ((cLine = reader.readLine()) != null) {
        for (String word : cLine.split(" ")) {words.add(word);}
      }
      reader.close();
      return words;
    }
    

    这将返回一个包含文件中所有单个单词的ArrayList&lt;String&gt;

    希望这会有所帮助。

    【讨论】:

    • 感谢@JHNUXER 的帮助。如何在数组中包含“。”(句号)
    • @paramtrivedi 哦,是的,当我回答时,我一定错过了你的问题,抱歉。如果您仍然感兴趣,您可能希望使用正则表达式来分隔点。或者,您可以使用 endsWith 检查单词是否以句号结尾,如果是,则使用 substring 将其去掉,然后在列表中添加句号。
    【解决方案3】:

    您可以使用Scanner 类和.next() 方法进行检查。

    【讨论】:

      【解决方案4】:

      这将读取文件并将所有单词收集到字符串列表中。

      编辑:更新以将标点符号等作为不同的词处理:

          try {
              List<String> words = Files.lines(Paths.get("/path/to/sample.txt"))
                  .map(line -> line.split("\\b"))
                  .flatMap(Arrays::stream)
                  .filter(w -> !w.trim().isEmpty())
                  .collect(Collectors.toList());
      
              return words;
          } catch (IOException e) {
              // handle error 
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-19
        • 1970-01-01
        • 2016-04-08
        • 2019-09-23
        相关资源
        最近更新 更多