2016-11-12 20 views
-2

は、だから私のコードでは、私は次のようにあるファイルの読み取りしようとしています:セミコロンで区切られたファイルから整数を読み取る方法は?

100 
22 
123;22 
123 342;432 

が、それはそれが含まれるであろう出力したときに「;」を(例えば、100,22,123; 22,123,342; 432})。 ファイルを配列(例:{100,22,123,22,123 ...})にしようとしています。 ファイルを読む方法はありますか?セミコロンは無視しますか? ありがとう!

public static void main(String args []) 
{ 
    String[] inFile = readFiles("ElevatorConfig.txt"); 
    for (int i = 0; i <inFile.length; i = i + 1) 
    { 
     System.out.println(inFile[i]); 
    } 
    System.out.println(Arrays.toString(inFile)); 
} 
public static String[] readFiles(String file) 
{ 
    int ctr = 0; 
    try{ 
     Scanner s1 = new Scanner(new File(file)); 
     while (s1.hasNextLine()){ 
      ctr = ctr + 1; 
      s1.next(); 

     } 
     String[] words = new String[ctr]; 
     Scanner s2 = new Scanner(new File(file)); 
     for (int i = 0 ; i < ctr ; i = i + 1){ 
      words[i] = s2.next(); 


     } 
     return words; 
    } 
    catch(FileNotFoundException e) 
    { 
     return null; 
    } 

} 
+0

セミコロンを無視したくない場合は、セミコロンをスペースのようにセパレータとして扱いたいとします。 '123; 22'のセミコロンを無視すると、' 12322'になります。 –

+0

BTWは、コードをコンパイルするだけで例外が発生しなかったとは決して判断しません。あなたが何か役に立つものをやろうとしているときにのみ例外を処理します。 –

+1

next()の代わりにnextInt()を試してください。 –

答えて

0
public static String[] readFiles(String file) 
{ 
    int ctr = 0; 
    try{ 
     Scanner s1 = new Scanner(new File(file)); 
     while (s1.hasNextLine()){ 
      ctr = ctr + 1; 
      s1.next(); 

     } 
     String[] words = new String[ctr]; 
     Scanner s2 = new Scanner(new File(file)); 
     for (int i = 0 ; i < ctr ; i = i + 1){ 
      words[i] = s2.next(); 


     } 
     return words; 
    } 
    catch(FileNotFoundException e) 
    { 
     return null; 
    } 

} 

パブリック静的文字列[] readFiles(文字列ファイル){

List<String> retList = new ArrayList<String>(); 
    Scanner s2 = new Scanner(new File(file)); 
    for (int i = 0 ; i < ctr ; i = i + 1){ 
     String temp = s2.next(); 
     String[] tempArr = se.split(";"); 
     for(int k=0;k<tempArr.length;k++) { 
      retList.add(tempArr[k]); 

     } 
} 

return (String[]) retList.toArray(); 

}

+1

オペレータは '123; 22'が' 123'と '22'になることを望んでいます –

+0

これはうまくいくはずです – abhinav

0

使用正規表現することによって、これを交換してください。ファイル全体を文字列に読み込みます(各トークンを文字列として読み取り、文字列の各トークンの後に空白スペースを追加します)空白とセミコロンで分割します。 words[]

String x <--- contains all contents of the file 
String[] words = x.split("[\\s\\;]+"); 

内容は以下のとおりです。

"100", "22", "123", "22", "123", "342", "432" 

は数字として使用する前intにそれらを解析することを忘れないでください。

+0

私はこれに似た何かをしましたが、ファイル全体を読むのではありません。それはちょうど最後の行を読むでしょう。配列を出力すると、各要素の最後の行になります。 – TheEWL

+0

@TheEWL Fine。必要なものを読んでから、split文を使用してください。 – progyammer

0

バッファリングされたリーダーを使用する簡単な方法1行ずつ読み込み、分割します。

public static String[] readFiles(String file) 
{ 
BufferedReader br = new BufferedReader(new FileReader(file))) 
StringBuilder sb = new StringBuilder(); 
String line = br.readLine(); 
while (line != null) { 
    sb.append(line); 
    sb.append(System.lineSeparator()); 
    line = br.readLine(); 
} 
String allfilestring = sb.toString(); 
String[] array = allfilestring.split(";"); 

return array; 
} 
0

split()を使用すると、正規表現を使用して要件に応じて文字列を配列に分割できます。

String s; // string you have read from the file 
String[] s1 = s.split(" |;"); // s1 contains the strings separated by space and ";" 

は、それが

0

は、配列のサイズをカウントするためのコードを保持するのに役立ちます願っています。 あなたの値を入力する方法を変えるだけです。

for (int i = 0; i < ctr; i++) { 
     words[i] = "" + s1.nextInt(); 
    } 
0

また、完全なファイル文字列内のすべての非数字文字をスペースで置き換えることもできます。そうすれば、任意の数字以外の文字は無視されます。

BufferedReader br = new BufferedReader(new FileReader(file))) 
StringBuilder sb = new StringBuilder(); 
String line = br.readLine(); 
while (line != null) { 
    sb.append(line); 
    line = br.readLine(); 
} 

String str = sb.toString(); 
str = str.replaceAll("\\D+"," "); 

ここでは、数字で区切った文字列をスペースで区切って数字の文字列にトークン化することができます。

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

その後、データ型をintに変換します。

関連する問題