2014-03-07 13 views
0

任何一個可以建議,如何使用字符串令牌的java,在一個文件中讀取所有數據,並只顯示部分內容選擇的內容。喜歡,如果我有使用Java中的StringTokenizer的顯示從文件

apple = 23456, mango = 12345, orange= 76548, guava = 56734 

我需要選擇蘋果,蘋果應該顯示在輸出中的值。

這是代碼

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.util.StringTokenizer; 

public class ReadFile { 

public static void main(String[] args) { 

try { 

String csvFile = "Data.txt"; 

    //create BufferedReader to read csv file 
    BufferedReader br = new BufferedReader(new FileReader(csvFile)); 
    String line = ""; 
    StringTokenizer st = null; 

    int lineNumber = 0; 
    int tokenNumber = 0; 

    //read comma separated file line by line 
    while ((line = br.readLine()) != null) { 
    lineNumber++; 

    //use comma as token separator 
    st = new StringTokenizer(line, ","); 

    while (st.hasMoreTokens()) { 
     tokenNumber++; 

     //display csv values 
     System.out.print(st.nextToken() + " "); 
    } 

    System.out.println(); 

    //reset token number 
    tokenNumber = 0; 
    } 

    } catch (Exception e) { 
    System.err.println("CSV file cannot be read : " + e); 
    } 
    } 

    } 

這是我工作的文件:

ImageFormat=GeoTIFF 
ProcessingLevel=GEO 
ResampCode=CC 
NoScans=10496 
NoPixels=10944 
MapProjection=UTM 
Ellipsoid=WGS_84 
Datum=WGS_84 
MapOriginLat=0.00000000 
MapOriginLon=0.00000000 
ProdULLat=18.54590200 
ProdULLon=73.80059300 
ProdURLat=18.54653200 
ProdURLon=73.90427600 
ProdLRLat=18.45168500 
ProdLRLon=73.90487900 
ProdLLLat=18.45105900 
ProdLLLon=73.80125300 
ProdULMapX=373416.66169100 
ProdULMapY=2051005.23286800 
ProdURMapX=384360.66169100 
ProdURMapY=2051005.23286800 
ProdLRMapX=373416.66169100 
ProdLRMapY=2040509.23286800 
ProdLLMapX=384360.66169100 
ProdLLMapY=2040509.23286800 

離開這裏,我只需要顯示以下內容: NoScans NoPixels ProdULLat ProdULLon 產品編號 產品編號

+0

看起來好像你要求我們爲你做你的工作 –

+0

閱讀文檔:http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer .html – r3ap3r

+1

你到目前爲止嘗試過什麼?如果嘗試一些東西,並提出一個令你困惑的錯誤,請發帖!我們將很樂意幫助:) – WillBD

回答

0

使用bufferedreader讀取一個完整的行並將其傳遞給帶有標記器的字符串化器,如「=」[如您在文件中提到的]。

更多請粘貼您的文件,到目前爲止,你已經嘗試過的..

ArrayList<String> list = new ArrayList<String>(); 
list.add("NoScans"); 
list.add("NoPixels"); 
list.add("ProdULLat"); 
list.add("ProdULLon"); 
list.add("ProdLRLat"); 
list.add("ProdLRLon"); 

//read a line from a file. 

    while ((line = br.readLine()) != null) { 
     lineNumber++; 

     //use 'equal to' as token separator 
     st = new StringTokenizer(line, "="); 
     //check for tokens from the above string tokenizer. 
     while (st.hasMoreTokens()) { 
     String key = st.nextToken(); //this will give the first token eg: NoScans 
     String value = st.nextToken(); //this will give the second token eg:10496 

     //check the value is present in the list or not. If it is present then print 
     //the value else leave it as it is. 
     if(list.contains(key){ 
      //display csv values 
      System.out.print(key+"="+ " "+value); 
      } 
     } 
+0

我已經發布了代碼。我只能讀取並顯示文件的內容....但無法理解如何做到上述提到的 –

+0

我已經提到了你粘貼的那個。你遇到什麼樣的錯誤和困難? – Shriram

+0

我需要讀取整個文件,並只顯示它的一部分。不是所有的數據。 –

0

我已經寫代碼假設你已經從文件到字符串存儲的數據,

public static void main(String[] args) { 
    try { 
     String[] CONSTANTS = {"apple", "guava"}; 
     String input = "apple = 23456, mango = 12345, orange= 76548, guava = 56734"; 
     String[] token = input.split(","); 

     for(String eachToken : token) { 
      String[] subToken = eachToken.split("="); 
      // checking whether this data is required or not. 
      if(subToken[0].trim().equals(CONSTANTS[0]) || subToken[0].trim().equals(CONSTANTS[1])) { 
       System.out.println("No Need to do anything"); 
      } else { 
       System.out.println(subToken[0] + " " + subToken[1]); 
      } 
     } 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

是否有任何其他方式來存儲數據從文件到字符串,而不是複製到輸入文件?因爲,我的文件 –

+0

只是做大塊..從來沒有從文件讀取整個數據 – Amarnath

+0

我們可以逐行讀取整個文件,並使用條件,我們可以顯示值嗎? –

1
public class Test { 

    public String getValue(String str, String strDelim, String keyValueDelim, String key){ 
     StringTokenizer tokens = new StringTokenizer(str, strDelim); 
     String sentence; 

     while(tokens.hasMoreElements()){ 
      sentence = tokens.nextToken(); 
      if(sentence.contains(key)){ 
      return sentence.split(keyValueDelim)[1]; 
      } 
     }   
    return null; 
    } 

    public static void main(String[] args) { 
    System.out.println(new Test().getValue("apple = 23456, mango = 12345, orange= 76548, guava = 56734", ",", "=", "apple")); 

    } 
} 

「我注意到你編輯了你的問題並添加了你的代碼。對於你的新版本問題,你仍然可以簡單地調用方法,同時從fi中讀取字符串樂和獲得你的願望價值! 「