• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:,で句切って部分一致をファイル出力)

ファイル出力のための文字列の部分一致を探す方法

このQ&Aのポイント
  • キーボードから入力された文字列とフォルダ内のファイルの文字列を比較し、部分一致する単語をファイルに出力するプログラムの作成方法を説明します。
  • プログラムは、キーボードから最大5文字までの文字列を入力し、フォルダ内のファイルとの部分一致を検索します。一致する単語があれば、それを新しいファイルに書き込みます。
  • 具体的なプログラムの手順は、(1)フォルダ内のファイルを読み込み、(2)キーボードから文字列を入力させます。そして、(3)入力された文字列がファイル内の単語に部分一致するか検索します。一致する単語があれば、新しいファイルに出力します。

質問者が選んだベストアンサー

  • ベストアンサー
  • momozange
  • ベストアンサー率67% (21/31)
回答No.1

魔が差したので作りました。 何か不備があれば自分なりに修正してみてください。 また、これは回答の内容までを保障する記述ではありません。 /** * execute */ public void execute() { final String loadFile = "c:/data.csv"; final String exportFile = "c:/result.csv"; try { String keyword = null; while (true) { System.out.print("Input a keyword ->"); keyword = this.getWord(); if (this.validate(keyword)) { break; } } List dataList = this.load(loadFile); List resultList = new ArrayList(); for (Iterator iterator = dataList.iterator(); iterator.hasNext();) { String value = (String) iterator.next(); if (this.find(value, keyword)) { resultList.add(value); } } this.export(exportFile, resultList); } catch (Exception e) { e.printStackTrace(); } } /** * get a word from keyboard */ private String getWord() throws Exception { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); return reader.readLine(); } /** * validate */ private boolean validate(String value) throws Exception { if (value == null) { return false; } Pattern pattern = Pattern.compile("[0-9a-zA-Z]{1,5}"); Matcher matcher = pattern.matcher(value); return matcher.matches(); } /** * find keyword */ private boolean find(String value, String keyword) throws Exception { if (value == null || keyword == null) { return false; } return value.indexOf(keyword) != -1; } /** * load file */ private List load(String fileName) throws Exception { List dataList = new ArrayList(); BufferedReader reader = null; FileReader fileReader = null; try { fileReader = new FileReader(fileName); reader = new BufferedReader(fileReader); String line = null; while ((line = reader.readLine()) != null) { String[] array = line.split("[,]"); dataList.addAll(Arrays.asList(array)); } return dataList; } finally { if (fileReader != null) { try { fileReader.close(); } catch (Exception e) { } } if (reader != null) { try { reader.close(); } catch (Exception e) { } } } } /** * export file */ private void export(String fileName, List dataList) throws Exception { BufferedWriter writer = null; FileWriter fileWriter= null; final String separator = ","; try { StringBuffer buffer = new StringBuffer(); for (Iterator iterator = dataList.iterator(); iterator.hasNext();) { buffer.append((String) iterator.next()); buffer.append(separator); } fileWriter = new FileWriter(fileName); writer = new BufferedWriter(fileWriter); writer.write(buffer.toString(), 0, buffer.length() - 1); writer.flush(); } finally { if (fileWriter != null) { try { fileWriter.close(); } catch (Exception e) { } } if (writer != null) { try { writer.close(); } catch (Exception e) { } } } }

すると、全ての回答が全文表示されます。

関連するQ&A