使用扫描仪时如何跳过字符

时间:2015-05-03 23:06:54

标签: java text java.util.scanner

我想从文本文件中读取文字,如下所示:

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

2 个答案:

答案 0 :(得分:5)

字符串是不可变的,这意味着你无法改变它们的状态。因为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());
}

答案 1 :(得分:-3)

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

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