2011-04-08 24 views
12

kadar aşağıdaki satırları alma Yani bu şu ana kadar ne var:Metin dosyasının içindeki dizeyi bulma yöntemi. Sonra belli bir limitin

public String[] findStudentInfo(String studentNumber) { 
       Student student = new Student(); 
       Scanner scanner = new Scanner("Student.txt"); 
       // Find the line that contains student Id 
       // If not found keep on going through the file 
       // If it finds it stop 
       // Call parseStudentInfoFromLine get the number of courses 
       // Create an array (lines) of size of the number of courses plus one 
       // assign the line that the student Id was found to the first index value of the array 
       //assign each next line to the following index of the array up to the amount of classes - 1 
       // return string array 
} 

Bir dosya ı bulmaya çalışıyorum dize içeriyorsa nasıl bulacağını biliyorum ama bilmiyorum tüm satırın nasıl alınacağı.

Bu benim ilk kez gönderme yaptığım için Yanlış bir şey yapsaydım lütfen bana bildirin.

File file = new File("Student.txt"); 

try { 
    Scanner scanner = new Scanner(file); 

    //now read the file line by line... 
    int lineNum = 0; 
    while (scanner.hasNextLine()) { 
     String line = scanner.nextLine(); 
     lineNum++; 
     if(<some condition is met for the line>) { 
      System.out.println("ho hum, i found it on line " +lineNum); 
     } 
    } 
} catch(FileNotFoundException e) { 
    //handle this 
} 
+1

bu ödev ise, örneğin etiketlenmiş edilmelidir: Burada –

+0

Giriş dosyasının bir örneğini ekleyebilir misiniz? – RonK

cevap

31

Böyle bir şey yapabilir? Bu, satırınızın dosyayı sizin okuduğunuz gibi içerip içermediğini kontrol etmenizi sağlar ve daha sonra ihtiyacınız olan mantığı gerçekleştirebilirsiniz.

Scanner scanner = new Scanner("Student.txt"); 
String currentLine; 

while((currentLine = scanner.readLine()) != null) 
{ 
    if(currentLine.indexOf("Your String")) 
    { 
     //Perform logic 
    } 
} 

Satır numarasını tutacak bir değişken kullanabilir veya Ayrıca size dizeyi içeren satırı geçtiyseniz bir boolean gösteren olabilir:

Scanner scanner = new Scanner("Student.txt"); 
String currentLine; 
int lineNumber = 0; 
Boolean passedLine = false; 
while((currentLine = scanner.readLine()) != null) 
{ 
    if(currentLine.indexOf("Your String")) 
    { 
     //Do task 
     passedLine = true; 
    } 
    if(passedLine) 
    { 
     //Do other task after passing the line. 
    } 
    lineNumber++; 
} 
+0

Bu bana studentNumber dizesini içeren satırı vermiyor. –

+0

Tamam, tekrar bakın ... –

+0

Tamam. Teşekkür ederim! –

2

dosyayı okurken, sen satır satır okuma olarak kabul vardır:

+0

Bunu deneyeyim. Sana geri döneceğim. –

+0

Sadece bir örnek, ama bunun gibi bir şey çalışmalı. –

+0

Teşekkürler! Bazı noktaları –

0

Benzer bir şey yapıyorum ama C++ 'da. Yapmanız gereken şey, satırları teker teker okuyup, ayrıştırmaktır (kelimeleri tek tek gözden geçirin). Tüm satırların üzerinden geçen ve içinde tüm kelimeleri geçen başka bir döngü olan bir dışsal döngü var. İhtiyacınız olan sözcük bulunduğunda, sadece döngüden çıkın ve bir sayaç veya istediğiniz her şeyi iade edin.

Bu benim kodum. Temel olarak tüm kelimeleri ayrıştırır ve bunları "dizin" e ekler. Kelimenin bulunduğu satır daha sonra bir vektöre eklenir ve dizine eklenmiş sözcüklerden satırın (dosyanın adını, çizginin tamamını ve satır numarasını içerir) başvurmak için kullanılır. Bu fonksiyon için FileUtils.readFileToString(file).contains(stringToFind)

belgeleri kullanarak bu kurmayı başardı Apache Commons IO API https://commons.apache.org/proper/commons-io/ kullanma

ifstream txtFile; 
txtFile.open(path, ifstream::in); 
char line[200]; 
//if path is valid AND is not already in the list then add it 
if(txtFile.is_open() && (find(textFilePaths.begin(), textFilePaths.end(), path) == textFilePaths.end())) //the path is valid 
{ 
    //Add the path to the list of file paths 
    textFilePaths.push_back(path); 
    int lineNumber = 1; 
    while(!txtFile.eof()) 
    { 
     txtFile.getline(line, 200); 
     Line * ln = new Line(line, path, lineNumber); 
     lineNumber++; 
     myList.push_back(ln); 
     vector<string> words = lineParser(ln); 
     for(unsigned int i = 0; i < words.size(); i++) 
     { 
      index->addWord(words[i], ln); 
     } 
    } 
    result = true; 
} 
+0

Yararlı olsa da, OP Java tabanlı bir çözüm istiyordu. C++ dosya işlemleri, Java'daki dosya işlemlerinden oldukça farklıdır, dolayısıyla cevabınız bu bağlamda tamamen yardımcı olmaz. –

-1

de TextScanner

kodu
public class TextScanner { 

     private static void readFile(String fileName) { 
      try { 
       File file = new File("/opt/pol/data22/ds_data118/0001/0025090290/2014/12/12/0029057983.ds"); 
       Scanner scanner = new Scanner(file); 
       while (scanner.hasNext()) { 
       System.out.println(scanner.next()); 
       } 
       scanner.close(); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 
      } 

      public static void main(String[] args) { 
      if (args.length != 1) { 
       System.err.println("usage: java TextScanner1" 
       + "file location"); 
       System.exit(0); 
      } 
      readFile(args[0]); 
     } 
} 
olduğu

Bu, metimetrelerle metin yazdıracaktır

for (String toFindUrl : urlsToTest) { 
     streamService(toFindUrl); 
    } 

private void streamService(String item) { 
     String tmp; 
     try (Stream<String> stream = Files.lines(Paths.get(fileName))) { 
      tmp = stream.filter(lines -> lines.contains(item)) 
         .foreach(System.out::println); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
1
bir metin dosyasına bir dize bulmak için bir java 8 yöntemdir.
İlgili konular