我编写了以下Java代码,
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始终为null,而stationName2可以获得值012650-99999
。谁能告诉我为什么会这样?提前谢谢!
@matt:是的,这是正确的,当我将编码从'UTF-8'更改为'ANSI'时,它工作,stationName1可以获得值,但为什么'UTF-8'不适用于这种情况?我总是使用那种格式。
答案 0 :(得分:3)
问题是您的文字文件不包含任何\t
个字符。有多个空间。正确的方法是使用匹配mutliple空格的\\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));
答案 1 :(得分: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);
}
}
}
答案 2 :(得分:0)
如果您确定该文件包含TAB空间,则匹配的正确方法如下。
String[] record = str.split("\\t");
split()
的参数是一个正则表达式,TAB空间的正则表达式是\t
,它作为Java字符串将是"\\t"
。
此外,请勿使用Hashtable
,请使用HashMap
,而不是另一个答案中所述。