2017-01-11 21 views
1

Прежде всего позвольте мне начать с того, что я знаю, что я не единственный, кто испытал эту проблему, и я провел последние пару часов, чтобы исследовать, как исправить это. К сожалению, я не могу заставить свой сканер работать. Я новичок в java, поэтому я не понимаю более сложных объяснений, которые некоторые ответы имеют в разных вопросах.Сложность сканера с различными escape-символами

Ниже приведено краткое описание: Я пытаюсь прочитать из файла, который содержит escape-символы карт. Вот короткая версия: (Числа 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 таким образом, что, когда он считывается из файла он считывается как String «\u2660» не как соответствующий символ Юникода.

Его содержание было бы тогда быть что-то вроде:

♠2,2 
... 

Другой способ мог бы использовать StringEscapeUtils.unescapeJava(String input) для экранирования в свой юникода характер.

Изменение кода будет таким:

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

Большое спасибо за то, что нашли время, чтобы ответить на мой вопрос. Я уже нашел ответ Николаса Филотто на работу. –