Java文本输入:如何忽略以某些字符开头的行



我基本上想忽略其中有字符的某些行,比如如果有一行

// hello, i'm bill

我想在阅读时忽略这一行,因为它包含字符"//"。我该怎么做?我尝试了方法skip(),但它给了我错误。

public String[] OpenFile() throws IOException {
  FileReader reader = new FileReader(path);
  BufferedReader textReader = new BufferedReader(reader);
  int numberOfLines = readLines();
  String[] textData = new String[numberOfLines];
  int i;
  for (i=0; i<numberOfLines; i++) {
      textData[i] = textReader.readLine();
  }
  // close the line-by-line reader and return the data
  textReader.close();
  return textData;
}
int readLines() throws IOException {
  FileReader reader = new FileReader(path);
  BufferedReader textReader = new BufferedReader(reader);
  String line;
  int numberOfLines = 0;
  while ((line = textReader.readLine()) != null) { 
    // I tried this:
    if (line.contains("//")) {
      line.skip();  
    }
    numberOfLines++;       
  }    
  reader.close();  
  return numberOfLines;
}

更新:这是我的主要方法:

try{
 ReadFile files = new ReadFile(file.getPath());
 String[] anyLines = files.OpenFile();
 }
while ((line = textReader.readLine()) != null) {
    // I tried this:
    if (line.contains("//")) {
      continue;
    }
    numberOfLines++;
}

注意,continue可能看起来有点像goto,并且倾向于批评


编辑以下内容(注意,这不需要countLines方法)

public String[] OpenFile() throws IOException {
   FileReader reader = new FileReader(path);
   BufferedReader textReader = new BufferedReader(reader);
   List<String> textData = new LinkedList<String>();//linked list to avoid realloc
   String line;
   while ((line = textReader.readLine()) != null) {
       if (!line.contains("//")) textData.add(line);
   }
   // close the line-by-line reader and return the data
   textReader.close();
   return textData.toArray(new String[textData.size()]);
}

正如Andrew Thompson所指出的,最好将文件逐行读取到ArrayList中伪代码:

 For Each Line In File
   If LineIsValid()
     AddLineToArrayList()
 Next

更新以修复实际代码:

public String[] OpenFile() throws IOException {
  FileReader reader = new FileReader(path);
  BufferedReader textReader = new BufferedReader(reader);
  int numberOfLines = readLines();
  String[] textData = new String[numberOfLines];
  int BufferIndex = 0;
  String line;
  while ((line = textReader.readLine()) != null) {
    if (line.trim().startsWith("//")) {
      // Don't inject current line into buffer
    }else{
       textData[BufferIndex] = textReader.readLine();
       BufferIndex = BufferIndex + 1;
    }      
  }
  // close the line-by-line reader and return the data
  textReader.close();
  return textData;
}

在ReadLines()函数中:

while ((line = textReader.readLine()) != null) {
    if (line.trim().startsWith("//")) {
      // do nothing
    }else{
      numberOfLines++;
    }      
}

基本上,你走在了正确的轨道上。

注意:您可能对startsWith()字符串函数

感兴趣

相关内容

  • 没有找到相关文章

最新更新