使用扫描仪时如何跳过角色



我想从文本文件中读取单词,该文件看起来像:

"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]);
      }
  }
}

字符串是不变的,这意味着您无法改变其状态。因此,replace不会更改其调用的字符串,而是使用需要存储在某个地方的替换数据(可能在引用中存储了原始字符串)。所以而不是

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

您需要使用

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

无论如何,设置定界符并使用nextLine毫无意义,因为此方法正在寻找行分隔符(例如n r rn),而不是您的定界数。如果要使扫描仪使用定界符,请使用其next()方法。

您还可以使用代表"","的不同定界符。您可以使用以下REGEX "(,")?创建一个。

,您的代码看起来像

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

您可以使用此正则表达式。它对我有用:

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

最新更新