2017-08-18 71 views
2

分开我是相当新的java的所以任何帮助,将不胜感激。从文件中读取特定线和数据从一条线

我试图写一个程序,要求从读取该文件的用户,则它要求一个ID,该ID在文件中搜索并输出从该行中的信息。 文本文件,它会从被格式化这样写着:

苹果^ 201^3

香蕉^ 202^4

橙^ 205^5

2nd列是ID。

此外,我需要的信息分离出一些如何,所以我可以输出这样的:

项目:苹果

ID:201:

价格:$ 3

import java.util.*; 
import java.io.*; 
public class fruit 
{ 
    public static void main(String[] args) throws IOException 
{ 
    Scanner keyboard = new Scanner(System.in); 

    System.out.println("Enter a filename >> "); 
    String filename = keyboard.nextLine(); 

    File f = new File(filename); 
    Scanner fin = new Scanner(f); 

    System.out.println("Enter item ID: "); 
    int fruitID = keyboard.nextInt(); 

    while(fin.hasNextLine()) 
    { 
     String line = fin.nextLine(); 

     if(fin.hasNextInt(fruitID)) 
     { 
      System.out.println(line); 
     } 
     else 
     { 
      System.out.println("ERROR"); 
     } 
    } 
     fin.close(); 
    } 
} 
+0

客串,这是你在找什么:https://stackoverflow.com/questions/3481828/how-to-split-a-string-in-java – Arne

回答

0
Hope this will help 


import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 

public class FindGivenStringFromFile { 

    public static void main(String args[]) throws FileNotFoundException { 

     Scanner keyboard = new Scanner(System.in); 

     System.out.println("Enter a filename >> "); 
     String filename = keyboard.nextLine(); 

     File f = new File(filename); 
     Scanner fin = new Scanner(f); 

     System.out.println("Enter item ID: "); 
     int fruitID = keyboard.nextInt(); 

     //Reading each line of file using Scanner class 
     int lineNumber = 1; 
     while (fin.hasNextLine()) { 
      String line = fin.nextLine(); 
      String[] lineDataArray = line.split("\\^"); 
      if(lineDataArray != null && lineDataArray.length >2){ 
       if(Integer.parseInt(lineDataArray[1]) == fruitID){ 
        System.out.println("Item: " + lineDataArray[0]); 
        System.out.println("Id: " + lineDataArray[1]); 
        System.out.println("price: $" + lineDataArray[2]); 
       } 

      lineNumber++; 
     }  

    } 
} 
} 
1

作为字符串分割需要的正则表达式和^具有正则表达式的含义,那么它的需求将被反斜杠

String input = fin.nextLine(); // e.g. Banana^202^4 
    System.out.println(input.split("\\^")[2]); 
1
public static void main(String[] args) throws IOException { 
    Scanner keyboard = new Scanner(System.in); 
    System.out.println("Enter a filename >> "); 
    String filename = keyboard.nextLine(); 
    System.out.println("Enter item ID: "); 
    String fruitID = Integer.toString(keyboard.nextInt()); 

    try (BufferedReader buffer = new BufferedReader(new FileReader(filename))) { 
     String line; 
     while ((line = buffer.readLine()) != null) { 
      String[] tokens = line.split("\\^"); 
      if (tokens.length < 3 && !tokens[1].equals(fruitID)) 
       continue; 
      System.out.println("Item: " + tokens[0]); 
      System.out.println("ID: " + tokens[1]); 
      System.out.println("Price: $" + tokens[2]); 
      break; 
     } 
    } 
    catch (Exception ex){ 
     ex.printStackTrace(); 
    } 
} 
  • Split用“^”,检查是否具有至少3个令牌和然后打印它们,如果第二个令牌等于输入的ID。
  • Starting Java 7,您可以使用try与资源,确保每个资源在语句结束时关闭。
  • 你找到了具体的线路后,您可以使用break避免解析文件的其余部分。