2014-12-08 24 views
1

我對java很陌生,現在我有點困惑。我試圖從文件中獲取一些輸入數據,並解析它,併爲其等同的東西給出正確的字段。例如,我的「in.txt」Java掃描儀從輸入文件中分離數據

Number: 2 Gender: 1 City: 4 Car: 7  
Gender: 1 City: 4 Number: 1                     
City: 2 Car: 1 Number: 3 

我試圖去那裏數等於2,並且性別等於1,與城市等於4,等等。到目前爲止,我能夠使用Java的掃描儀閱讀文件,所以我知道它的閱讀正確。那麼我怎樣才能將這些名字與數字相對應(如數字:2)。我是否應該在看到「:」時分割線條?就像給它一個左側和一個右側,或者是否會把「性別:1城市:4 ...」的其餘部分搞亂?我正在嘗試不同的事情,因爲我正在輸入這些信息,而我只是陷入瞭如何將數據與文件分開的問題。我非常感謝任何幫助。謝謝。這是我用來獲取文件的掃描儀文件。

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

public class example{ 
    public static void main(String[] args) throws FileNotFoundException{ 
    File inFile = new File("in.txt"); 
    Scanner input = new Scanner(inFile); 
    while(input.hasNext()){ 
     String line = input.nextLine(); 
     System.out.println(line); 
    } 
    } 
} 
+0

所以,你有不同的領域?你在用什麼?它是否像數字:1與性別和城市,數量:2自帶性別,城市和汽車,數量:3自帶城市和汽車? – Gosu 2014-12-08 08:50:38

+0

就像你說的你可以使用分割「:」。 – Jure 2014-12-08 08:56:01

+0

@Gosu它有點像數據庫。如果我要說「db.collection.find({City = 4},{Number})」 我會得到一個輸出 Number:2 Number:1 – King11 2014-12-08 08:57:01

回答

2

如果像你描述它的文件或線路總是建立,可以拆分空間和陣列中的例如搜索您需要的價值"Number:"(如有必要,您可以刪除「:」),然後在此陣列中觀看此position + 1並且有值。

拆分爲「:」將這種陣列中結束:

{[Number],[ 2 Gender],[ 1 City],[ 4 Car],[ 7]} 

所以我覺得這是不是最好的解決方案。

+0

是的,線條總是這樣構建的。但是不會在空間上分裂成爲線路末端的問題? – King11 2014-12-08 09:02:17

+0

@ King11你爲什麼認爲這會是一個問題? – 2014-12-08 09:12:39

+0

嗯,我在想,例如:---- int split_index = line.lastIndexOf(「:」); left = line.substring(0,split_index); right = line.subString(split_index,line.length()); ----這不會以我想到的方式工作。就像我想要的號碼,性別,城市和汽車都是左邊的,2,1,4,7都是正確的。如果我分割一個空格,那麼只有數字會被留下,剩下的部分將會是正確的 – King11 2014-12-08 09:21:19

0

解決識別每行中每個鍵/值對的問題的一種方法是使用正則表達式來查找每行中的每一對。 Java Tutorials on Regular Expressions爲該主題提供了一個很好且相當全面的起點。

爲了讓您一開始就這一點,正則表達式[A-Za-z]+: [0-9]+將隔離每個鍵值對的你,和一個正則表達式助手如this web page at regexplanet.com將測試有很大幫助,並開始以確定你需要的代碼。

+0

它們不是數組,它們只是文本文件中的文本/單詞 – King11 2014-12-08 09:03:49

+0

是的 - 正則表達式非常適合解析raw文本來識別其中的值。正則表達式被設計用於處理原始字符串,而不是數組。 – robjohncox 2014-12-08 09:04:50

+0

順便說一句,這個答案在沒有提供準確的代碼方面是刻意模糊的,因爲正則表達式是我認爲我們應該掌握並掌握的那些主題之一,它是我們在學習時可以做出的最寶貴的時間投資之一編寫代碼:) – robjohncox 2014-12-08 09:06:41

0

你想得到這些數字嗎? 1: 如果我理解正確,你可以這樣做。

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Number { 
    public static void main(String[] args) { 
     String regex = "\\d+"; 
     String candidate = "Number: 2 Gender: 1 City: 4 Car: 7 "; 

     Pattern p = Pattern.compile(regex); 
     Matcher matcher = p.matcher(candidate); 
     while(matcher.find()){ 
      System.out.println(matcher.group()); 
     } 
    } 
} 

2:如果你可以格式化你的數據,你可以格式化成JSON,並在各行中使用JSON-lib.jar