問題は、区切り文字としてScanner
使用するように指示したので、空白を区切り文字として使用しなくなったことです。したがって、テスト対象のトークンは isn'tであり、 (前の行の終わり、改行、および次の行の始まり) であり、一致しません。;
"45"
"45"
"456\n45"
区切り文字としてセミコロンと空白の両方useDelimiter
を使用するように行を変更します。
scanner.useDelimiter("[;\\s]");
...そして、スキャナは と を別々に見て"456"
、"45"
と照合し"45"
ます。
このコード:
import java.util.*;
import java.io.*;
public class Parse {
public static final void main(String[] args) {
try {
String result = test(45);
System.out.println("result = " + result);
}
catch (Exception e) {
System.out.println("Exception");
}
}
public static String test(int numVol)throws Exception{
File file = new File("test.csv");
Scanner scanner = new Scanner(file);
scanner.useDelimiter("[;\\s]"); // <==== Change is here
String line = "";
String sNumVol = ""+numVol;
while (scanner.hasNext()){
line = scanner.next();
if(line.equals(sNumVol)){
scanner.close();
return line;
}
}
scanner.close();
return line;
}
}
これでtest.csv
:
54;a;23;c;de;56
23;d;24;c;h;456
45;87;c;y;535
432;42;h;h;543
これを示します:
$ Java パース
結果 = 45
この問題に対する答えを見つける方法は、デバッガーを使用してコードをウォークスルーし、 の値を監視するline
か、(何らかの理由でデバッガーがない場合は?!)System.out.println("line = " + line);
ステートメントをループに挿入して確認することでした。比較していたもの。たとえば、System.out.println("line = " + line);
上記のline = scanner.next();
行の上に a を挿入";"
し、区切り文字としてのみ使用する場合:
import java.util.*;
import java.io.*;
public class Parse {
public static final void main(String[] args) {
try {
String result = test(45);
System.out.println("result = " + result);
}
catch (Exception e) {
System.out.println("Exception");
}
}
public static String test(int numVol)throws Exception{
File file = new File("test.csv");
Scanner scanner = new Scanner(file);
scanner.useDelimiter(";"); // <== Just using ";"
String line = "";
String sNumVol = ""+numVol;
while (scanner.hasNext()){
line = scanner.next();
System.out.println("line = [[" + line + "]]");
if(line.equals(sNumVol)){
scanner.close();
return line;
}
}
scanner.close();
return line;
}
}
次のように表示されます。
$ Java パース
行 = [[54]]
行 = [[a]]
行 = [[23]]
行 = [[c]]
行 = [[de]]
行 = [[56
23]]
行 = [[d]]
行 = [[24]]
行 = [[c]]
行 = [[h]]
行 = [[456
45]]
行 = [[87]]
行 = [[c]]
行 = [[y]]
行 = [[535
432]]
行 = [[42]]
行 = [[h]]
行 = [[h]]
行 = [[543
]]
結果 = 543
...問題を視覚化するのに役立ちます。