Java Text Input: Как игнорировать строки, начинающиеся с определенных символов в них? - PullRequest
1 голос
/ 23 мая 2011

Я в основном хочу игнорировать определенные строки с символами в них, например, если есть строка

// 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();
 }

Ответы [ 2 ]

5 голосов
/ 23 мая 2011
while ((line = textReader.readLine()) != null) {

    // I tried this:
    if (line.contains("//")) {
      continue;
    }

    numberOfLines++;

}

обратите внимание, что continue может показаться немного странным и быть склонным к критике


отредактируйте вот что вам нужно (обратите внимание, что метод 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()]);
}
4 голосов
/ 23 мая 2011

Как отмечает Эндрю Томпсон, было бы лучше прочитать файл построчно в 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++;
    }      
}

По сути, вы на правильном пути.

Примечание : Вас может заинтересовать строковая функция StartWith ()

...