テキストファイルからデータを読み込んでセットに保存するタスクが与えられました。テキストファイルは、特定の商品説明とその価格、数量、合計金額を含む架空の請求書を表します。私はアイテムの名前と価格が必要です。テキストファイルは次のようになります。数字と文字の両方を含むテキストファイルを同じ行に読み込んで解析する
Item_name Item_price(float value with comma as format symbol) Quantity(int) Total(float)
Item_name Item_price(float value with comma as format symbol) Quantity(int) Total(float)
(テキストファイルには複数の項目が含まれています)。また、アイテムには名前に数字が含まれることもあります。 LG 4k TV 1000U)。
私はこのようにそれを解決しようとした:
private void readAndSave(Path file) {
try (BufferedReader br = new BufferedReader(new InputStreamReader(
new BufferedInputStream(new FileInputStream(file.toString()))))) {
Set<Item> items = new TreeSet<>();
String line;
while ((line = br.readLine()) != null) {
float price = 0, numb;
boolean priceFound = false;
String name = "";
String[] lineElements;
lineElements = line.split(" ");
for(String temp: lineElements) {
if((numb = getNumberRepresentation(temp)) != -1) {
if(!priceFound) {
price = numb;
priceFound = true;
}
break;
}
name += temp + " ";
}
items.add(new Item(name, price));
}
} catch (FileNotFoundException fe) {
System.out.println("File not found!");
} catch (IOException e) {
System.out.println("Error while opening/writing files!");
}
}
クラスItem
は、アイテムの名前と価格を表す2つの変数(文字列、フロート)を含み、Comparable
を拡張します。
そして、ここでは、私はスキップすることができます価格が発見された場合、その名前もすでに見つけられなければならない、ロジック、およびラインから他のすべての文字列を使用しようとした
private float getNumberRepresentation(String temp) {
try {
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator(',');
DecimalFormat format = new DecimalFormat("0.##");
format.setDecimalFormatSymbols(symbols);
return format.parse(temp).floatValue();
} catch(Exception e) {
return -1;
}
}
getNumberRepresentation
方法であり、 。ここで問題となるのは、アイテムの名前から価格(前の例では1000U)を取得することがあることです。この問題を解決するために、より効率的な方法がありますか?
編集:ファイルのサンプル
Escape from Paradise City 70,00 1135 79450,00 Sony ITC60, TV cabel 111,26 111 12349,86
1つの提案へあなたの既存のコードは...あなたを一時的に価値あるものと解釈するために '試してキャッチする' TryParse() などを使用してください。 bool結果= Int32.TryParse(値、アウト数); if(result) { Console.WriteLine( "{0}"を{1}。 "、value、number)に変換します。 } else { // if(value == null)value = ""; Console.WriteLine( "'{0}'の変換を試みましたが失敗しました。"、 値== null? "":値); } –
Gwasshoppa
テキストファイルの外観を制御できますか?あなたはファイルをタブ区切りにすることができますか?そして、あなたはタブで分割しています。 "(スペース。 – Gwasshoppa
申し訳ありませんが、残念ながら私はテキストファイルを制御できません。 – kolsdj