假设我有一个这样的文本文件:
ALASKA 30-DEC-11
CD STATION ICAO IATA SYNOP LAT LONG ELEV M N V U A C
AK ADAK NAS PADK ADK 70454 51 53N 176 39W 4 X T 7 US
AK AKHIOK PAKH AKK
56 56N 154 11W 14 X 8 US
AK AMBLER PAFM AFM 67 06N 157 51W 88 X 7 US
AK ANAKTUVUK PASS PAKP AKP 68 08N 151 44W 642 X 7 US
我只对保存以AK开头的行感兴趣。另外,我需要将某些信息保存到数组中,例如我的STATION名称。
对于第一行,我想将“ADAK NAS”存储到stationArray中,将“51”存储到数组中,与“53”,“N”,“176”,“39”和“W”相同。我想为以AK开头的每一行做这个。
我真的很困惑如何解决这个问题。我目前的相关代码如下:
//process text file
FileInputStream fstream = new FileInputStream("file.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
//add lines that start with "AK" to arraylist
ArrayList list = new ArrayList();
while ((strLine = br.readLine()) != null && strLine.startsWith("AK")) {
list.add(strLine);
}
Iterator itr;
for (itr=list.iterator(); itr.hasNext(); ) {
String str = itr.next().toString();
String [] splitSt =str.split("\\t");
String junk1 = "\\t";
我从在线提取迭代器部分,并且不知道如何将其拆分,或者如何将相应的值放入数组中。我很感激您提供的任何帮助。谢谢!
答案 0 :(得分:0)
这是你想要的吗?
List<String> list = new ArrayList<String>();
List<String[]> out = new ArrayList<String[]>();
while ((strLine = br.readLine()) != null && strLine.startsWith("AK"))
{
list.add(strLine);
}
for(String line : list){
String[] lineArr = str.split("\\t");
}
for (itr=list.iterator(); itr.hasNext(); )
{
String delimiter = "\\t";
String [] splitSt =str.split(delimiter);
//we don't know how many we're going to find,
//so we should accumulate the data in a List.
out.add(splitSt);
}
String[] stationArray = out.toArray(new String[out.size()]);
答案 1 :(得分:0)
你的代码将退出while循环@第一行,不以“AK”开头
你应该更换
while((strLine = br.readLine())!= null&amp;&amp; strLine.startsWith(“AK”))
{
list.add(strLine中);
}
按
while((strLine = br.readLine())!= null)
{
如果(strLine.startsWith( “AK”))
list.add(strLine中);
}
按
答案 2 :(得分:0)
这看起来更像固定宽度文件(特定位置中的字段)或固定宽度文件上的某些变量。在这种情况下,您可以使用substr函数来获取字段(请注意,您还应测试字符串长度):
while ((strLine = br.readLine()) != null) {
if ( strLine.startsWith("AK") {
field1 = strLine.substring(.., ..);
field2 = strLine.substring(.., ..);
......
}
}
如果有很多字段,您可以查看其中一个支持固定宽度文件的平面文件阅读器包(例如JRecord,Flatworm +许多其他文件) 。在这种情况下,他们可能是一个矫枉过正的
以下是所提供文件的略微更改版本(如果原始列表准确,某些字段已嵌入CR /新行/制表符.CR /新行字符将使阅读更加困难。)
ALASKA 30-DEC-11
CD STATION ICAO IATA SYNOP LAT LONG ELEV M N V U A C
AK ADAK NAS PADK ADK 70454 51 53N 176 39W 4 X T 7 US
AK AKHIOK PAKH AKK 56 56N 154 11W 14 X 8 US
AK AMBLER PAFM AFM 67 06N 157 51W 88 X 7 US
AK ANAKTUVUK PASS PAKP AKP 68 08N 151 44W 642 X 7 US
答案 3 :(得分:0)
否则,我应该说正则表达式可以为你解决这些问题带来很多麻烦。您可以轻松地提取所需的字段,而无需循环和条件处理。
然而,有智者曾经说过,当有人试图用正则表达式解决问题时,他现在有2个问题。