2017-01-11 45 views
1

首先讓我開始說我知道我不是唯一一個遇到過這個問題的人,我花了最近幾個小時研究如何解決這個問題。可悲的是,我無法讓我的掃描儀工作。我是新來的java所以我不明白更復雜的解釋,一些答案在不同的問題。掃描儀遇到不同轉義字符時的困難

這裏是破敗: 我想讀出一個包含卡片轉義字符的文件。下面是一個簡短的版本:(編號2和3 4的不同的卡面)

\u26602,2 
\u26652,2 
\u26662,2 
\u26632,2 
\u26603,3 
\u26653,3 
\u26663,3 
\u26633,3 

這是格式:(西裝)(面),(值)。一個例子:

  • \ u2663 =西裝
  • 3 =臉
  • 3 =值

這是我使用用於讀取它的代碼:

File file = new File("Cards.txt"); 
try { 
    Scanner scanner = new Scanner(file); 
    while (scanner.hasNextLine()) { 
     String line = scanner.nextLine(); 
     String[] temp = line.split(","); 
     cards.add(new Card(temp[0], Integer.parseInt(temp[1]))); 
    } 
    scanner.close(); 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} 

ArrayList卡片之後應該有52張卡片,其中包含一個名稱(花色和臉部)和一個值。當我嘗試打印的名字,這是輸出:

\u26633 

雖然它應該是:

♣3 

誰能給我指點向着一個解決方案?我真的需要解決這個問題。我不想讓你爲我寫我的代碼。

在此先感謝

回答

3

只需直接存儲西裝字符轉換成使用您的文件Cards.txt UTF-8字符編碼,而不是由Java的,這樣當它從你的文件只讀瞭解相應的Unicode字符格式它被讀作String\u2660」而不是相應的unicode字符。然後

它的內容是這樣的:

♠2,2 
... 

另一種方法可以是使用StringEscapeUtils.unescapeJava(String input)反轉義的Unicode字符。然後

代碼的變化將是:

cards.add(new Card(StringEscapeUtils.unescapeJava(temp[0]), Integer.parseInt(temp[1]))); 
+1

非常感謝,我從來沒有想過只是將字符本身放在文本文件中並使用UTF-8編碼進行保存!它現在有效。 –

0

你必須保存您的文件,UTF-8編碼,然後使用相同的編碼讀取文件。

♥,1

♥,2

♥,3

這裏是代碼片段:

BufferedReader buff = new BufferedReader(new InputStreamReader(
     new FileInputStream("Cards.txt"), "UTF-8")); 

String input = null; 
while (null != (input = buff.readLine())) { 
    System.out.println(input); 
    String[] temp = input.split(","); 
    cards.add(new Card(temp[0], Integer.parseInt(temp[1]))); 
} 

buff.close(); 

此外,還需要確保您的控制檯已啓用以支持UTF-8。看看this答案閱讀更多關於它。

+0

非常感謝您花時間回答我的問題。我已經找到Nicolas Filotto的工作答案。 –