2016-05-27 11 views
0

Я написал следующий Java-код,Не удается получить значение из Hashtable

try { 
     String str = ""; 
     Hashtable< String, String> table = new Hashtable< String, String>(); 
     fis = new FileInputStream("C:\\Users\\Dave\\Desktop\\station.txt");// FileInputStream 

     isr = new InputStreamReader(fis); 
     br = new BufferedReader(isr); 

     String str1 = "012649-99999"; 
     String str2 = "012650-99999"; 
     while ((str = br.readLine()) != null) { 
      String[] record = str.split("\t"); 
      table.put(record[0], record[1]); 
     }   
     String stationName1 = table.get(str1); 
     String stationName2 = table.get(str2); 

    } catch(...) 

и содержание station.txt выглядит следующим образом:

012649-99999 SIHCCAJAVRI 
012650-99999 TRNSET-HANSMOEN 

Когда я запускаю программу, то stationName1 всегда нуль , а stationName2 может получить значение «012650-99999». Кто может сказать мне, почему это происходит? Заранее спасибо!

@matt, Да, это правильно, когда я изменил кодировку с «UTF-8» на «ANSI», это сработало, stationName1 может получить значение, но почему «UTF-8» не работает для этой ситуации? Я всегда использую этот формат.

+0

Вы должны использовать HashMap для одной вещи. Как насчет того, что вы печатаете запись [0] и записываете [1], когда вы заполняете свою карту. Удостоверьтесь, что происходит в том, что вы думаете. – matt

+0

1) Используйте 'HashMap '. 2) программа для 'interface' so' Map = new HashMap <>() '. 3) Почему вы не печатаете содержимое «Карты», чтобы увидеть, что там? Возможно, вам понадобится 'trim()'. –

+0

Я могу убедиться, что запись [0] и запись [1] - это то, что я думаю и что хочу, я напечатал ее на консоли. – Coinnigh

ответ

3

Проблема заключается в том, что ваш текстовый файл не содержит символов \t. Есть несколько пробелов. Правильный способ - использовать \\s+, который соответствует нескольким пробелам.

String[] record = str.split("\\s+"); 

Кроме того Hashtable является устаревшим. Сейчас вместо этого стоит HashMap<>. Вот полный код для меня. Я ее протестировал:

String str; 
HashMap<String, String> table = new HashMap<>(); 
FileInputStream fis = new FileInputStream("station.txt"); 
InputStreamReader isr = new InputStreamReader(fis); 
BufferedReader br = new BufferedReader(isr); 

String str1 = "012649-99999"; 
String str2 = "012650-99999"; 

while ((str = br.readLine()) != null) { 
    String[] record = str.split("\\s+"); 
    table.put(record[0], record[1]); 
}   
System.out.println(table.get(str1)); 
System.out.println(table.get(str2)); 
+0

Я пробовал код String [] record = str.split ("\\ s +"); только сейчас, но результат такой же , – Coinnigh

+0

Я пробовал прямо сейчас и работает для меня. Смотрите мой полный код выше. Это просто не может быть нулевым. Вы читаете из правильного файла? –

+0

Да, формат файла неправильный, когда я изменил кодировку с «UTF-8» на «ANSI», она сработала, stationName1 может получить значение, но почему «UTF-8» не работает для этой ситуации? Я всегда использую этот формат. – Coinnigh

0

Если вы уверены, что файл содержит пространство TAB, правильный способ соответствия будет следующим.

String[] record = str.split("\\t"); 

Аргумент split() является регулярное выражение и регулярное выражение для TAB пространства \t, который, как Java String, будет "\\t".

Кроме того, не используйте Hashtable, используйте вместо этого HashMap, как объяснено в другом ответе.

+0

Помогите объяснить нижний план? –

+0

Сплит только с одной косой чертой тоже. Однако и, конечно, лучше всего две слэши –

+0

Я не проголосовавший, но он тоже не работает. –

1

Не могли бы вы, пожалуйста, замените следующую строку:

String[] record = str.split("\t"); 

по следующей линии:

String[] record = str.split("[\\s]+"); 

и увидеть результат?

Ваш рабочий раствор здесь: -

import java.io.BufferedReader; 
import java.io.FileInputStream; 
import java.io.InputStreamReader; 
import java.util.Hashtable; 

public class Test { 
    public static void main(String[] args) { 
     try { 
      String str = ""; 
      Hashtable< String, String> table = new Hashtable< String, String>(); 
      FileInputStream fis = new FileInputStream("C:\\Users\\Dave\\Desktop\\station.txt");// FileInputStream 

      InputStreamReader isr = new InputStreamReader(fis); 
      BufferedReader br = new BufferedReader(isr); 

      String str1 = "012649-99999"; 
      String str2 = "012650-99999"; 
      while ((str = br.readLine()) != null) { 
       System.out.println(str); 
       String[] record = str.split("[\\s]+"); 
       table.put(record[0], record[1]); 
      } 
      br.close(); 
      String stationName1 = table.get(str1); 
      String stationName2 = table.get(str2); 

      System.out.println("stationName1:"+stationName1);// 
      System.out.println("stationName2:"+stationName2);// 
     } catch(Exception e){ 
      System.out.println(e); 
     } 
    } 

} 
Смежные вопросы