【问题标题】:How to skip a character when using Scanner使用扫描仪时如何跳过字符
【发布时间】:2015-05-03 23:06:53
【问题描述】:

我想从一个看起来像这样的文本文件中读取单词:

"A","ABILITY","ABLE","ABOUT","ABOVE","ABSENCE","ABSOLUTELY","ACADEMIC","ACCEPT","ACCESS","ACCIDENT","ACCOMPANY", ...

我使用split("\",\"") 阅读这些单词,所以我将它们放在一个矩阵中。不幸的是,我无法跳过读取第一个引号,它启动了我的 .txt 文件,因此在我的控制台中我有:

"A
ABILITY
ABLE
ABOUT
ABOVE

你知道如何跳过第一个引号吗?我都在尝试

Scanner in = new Scanner(file).useDelimiter("\""); 

parts[0].replace("\"", "");,但它不起作用。

package list_1;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class exercise {
  public static void main(String[] args) throws FileNotFoundException{
      File file = new File("slowa.txt");
      Scanner in = new Scanner(file).useDelimiter("\"");     //delimiter doesn't work!

      String sentence = in.nextLine();
      String[] parts = sentence.split("\",\"");
      parts[0].replace("\"", "");                 //it doesn't work!

      for (int i=0; i<10 ; i++){
          System.out.println(parts[i]);
      }
  }
}

【问题讨论】:

    标签: java text java.util.scanner


    【解决方案1】:

    字符串是不可变的,这意味着您无法更改它们的状态。因此,replace 不会更改调用它的字符串,而是使用您需要存储在某处的替换数据创建新的字符串(可能参考存储的原始字符串)。所以不是

    parts[0].replace("\"", "");  
    

    你需要使用

    parts[0] = parts[0].replace("\"", "");  
    

    无论如何设置分隔符并使用nextLine 没有多大意义,因为此方法正在寻找行分隔符(如\n \r \r\n),而不是您的分隔符。如果您想让扫描仪使用分隔符,请使用其next() 方法。

    您还可以使用不同的分隔符来表示"","。您可以使用以下正则表达式 "(,")? 创建一个。

    所以你的代码可能看起来像

    Scanner in = new Scanner(file).useDelimiter("\"(,\")?");
    while(in.hasNext()){
        System.out.println(in.next());
    }
    

    【讨论】:

      【解决方案2】:

      你可以使用这个正则表达式。它对我有用:

      Scanner in = new Scanner(file).useDelimiter("\"(,\")?"); 
      while(in.hasNext()){
          System.out.println(in.next());
      }
      

      【讨论】:

      猜你喜欢
      • 2013-05-14
      • 2014-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-04
      • 2016-12-01
      • 2021-11-11
      相关资源
      最近更新 更多