質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

1577閲覧

java csvを読み込んで一文ごと漢字率を求めてcsvで出力したいです。

menuett

総合スコア15

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/11/12 14:47

編集2018/11/12 15:23

前提・実現したいこと

javaで商品レビューのデータをまとめたcsvを読み込み,その文章の漢字率を1レビューごとに求めて,その結果を再びcsvまたはtxt形式で出力したいです。
csvは、参考になった人数, レビュー本文という順番で保存しています。参考になった人数は、漢字率演算には含めないようにもしたいです。
例としては
400,"私は黒を購入しました!。サイズはぴったりです。"
300,"サイズはぴったりでしたが、質感はあまり良くないです。"
↑この形式に漢字率を付与した形での出力を目指しています。

30%,400,"私は黒を購入しました!。サイズはぴったりです。"
40%,300,"サイズはぴったりでしたが、質感はあまり良くないです。"
↑このような感じです。

発生している問題・エラーメッセージ

csvを読み込んで漢字率を出すことはできそうなのですが、それはcsv全体の漢字率になってしまいます。csvを読み込むときreadLineが一行ずつ読み込むとあったので、てっきり簡単だと思ったらcsv全体を読み込んでいるようで、修正しようとすると、どんどん分からなくなっていきました。
なので、最初に形にしたソースコードを貼ります。
csvを読み込んで、文章の文字数、漢字の数、非漢字数を表示した後でファイルにそれぞれ出力しました。下のkanjiCheckで漢字かどうか判断しています。

エラーメッセージ

該当のソースコード

java #言語
ソースコード

import java.io.*; class KanjiTest { // 入力ファイル static final String reviewFile = "pc_review.csv"; // 出力ファイル static final String allFile = "全.txt"; static final String kanjiFile = "漢字.txt"; static final String nonKanjiFile = "非漢字.txt"; public static void main(String args[]){ try{ // // 入力ファイル // BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(reviewFile),"utf-8")); // // 出力ファイル // // 全 PrintWriter pw1 = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(allFile),"Shift_JIS"))); // 漢字 PrintWriter pw2 = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(kanjiFile),"Shift_JIS"))); // 非漢字 PrintWriter pw3 = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(nonKanjiFile),"Shift_JIS"))); int countAll = 0; int countKanji = 0; int countNonKanji = 0; String line; while ((line = br.readLine()) != null) { for (int i = 0; i < line.length(); i++) { char c = line.charAt(i); countAll++; pw1.println(c); if (kanjiCheck(c)) { countKanji++; pw2.println(c); } else { countNonKanji++; pw3.println(c); } } } System.out.println("全文字数:" + countAll); System.out.println("漢字数:" + countKanji); System.out.println("非漢字数:" + countNonKanji); pw1.close(); pw2.close(); pw3.close(); } catch (IOException ex) { ex.printStackTrace(); } } private static boolean kanjiCheck(char kanji) { boolean flag = false; try { String str = "" + kanji; byte[] b = str.getBytes("utf-8"); if (b[0] >= (byte)0xE4 && b[0] <= (byte)0xE9) { flag = true; } } catch(Exception e) { System.out.println("文字コードチェックエラー"); } return flag; } }

試したこと

どうやらAllayListを使えば、うまく行きそうな気配があるので試していますが、よくわかりません。
出力ファイルは漢字率が付与されたcsv一つだけでいいと思います。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2018/11/12 15:10

コードはマークダウンしてください。
guest

回答2

0

ベストアンサー

Java8以上ですが、下記のような感じではどうでしょう?

java

1try { 2 // ファイルの読み込みは Files使って簡潔に 3 Path inputFilePath = Paths.get(reviewFile) 4 List<String> lines = Files.readAllLines(inputFilePath); 5 // 出力用のバッファ 6 List<String> outputList = new ArrayList<>(); 7 8 lines.forEach(line -> { 9 // 文字列を指定文字で分割 10 String[] cols = line.split(","); 11 // cols[0]=400, cols[1]="私は黒を購入しました!。サイズはぴったりです。" になります。 12 // ただしレビュー本文の中に, が含まれる場合は正しく処理できないです 13 14 // 全文字数はカウントしなくてもこれでいいですよね 15 long countAll = cols[1].length(); 16 17 // Stream.filterで条件に合ったものを抽出して 18 // UnicodeBlockを使って文字判定を行い、一気にカウントまで 19 long countKanji = (cols[1].chars()).filter(c -> 20 (UnicodeBlock.of(c) == UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS) 21 ).count(); 22 23 // 行単位に比率計算して出力バッファに追加 24 int ratio = (int)(((countKanji * 1.0) / countAll) * 100); 25 outputList.add(String.format("%d%%,%s,%s",ratio,cols[0],cols[1])); 26 }); 27 // ファイル出力 28 // 質問のコードには 文字種ごとにファイル分ける感じでしたが、質問本文の意図としてはこちらかな 29 // ファイル名の変数 outputFileはあらかじめ設定しておいてください 30 Files.write(Paths.get(outPutFile), outputList, 31 Charset.forName("Shift_JIS"), 32 StandardOpenOption.TRUNCATE_EXISTING); 33} 34catch (IOException ex) { 35 ex.printStackTrace(); 36} 37

投稿2018/11/12 17:34

euledge

総合スコア2404

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

menuett

2018/11/13 08:42

回答ありがとうございます。 回答していただいたソースコードを使ってみようとしたら KanjiSample.java:25: エラー: シンボルを見つけられません Path inputFilePath = Paths.get(reviewFile); ^ シンボル: クラス Path 場所: クラス KanjiSample というエラーが出てしまいました。 必要なライブラリを一通りimportしていく中で、これだけが解決方法が分かりません。 私がjavaに慣れていないということもあるので、そもそもソースコードの使い方が分かっていないと思いますので、このソースコードの実行結果も含めた使い方も回答いただけたら嬉しいです。 あとレビューのデータは実際、5万、6万もあり、,(カンマ)も本文中に登場します。 現在のソースの状態がこれです。 import java.io.*; import java.io.IOException; import java.io.OutputStream; import java.io.File; import java.lang.Object; import java.lang.Character.Subset; import java.lang.Character.UnicodeBlock; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Paths; import java.nio.file. Files; import java.nio.file.StandardOpenOption; import java.util.ArrayList; import java.util.List; import java.util.stream.Stream; class KanjiSample { // 入力ファイル static final String reviewFile = "rd_review.csv"; static final String outPutFile = "kanjiritu.csv"; public static void main(String args[]){ try { Path inputFilePath = Paths.get(reviewFile); List<String> lines = Files.readAllLines(inputFilePath); List<String> outputList = new ArrayList<>(); lines.forEach(line -> { String[] cols = line.split(","); long countAll = cols[1].length(); long countKanji =(cols[1].chars()).filter(c -> (UnicodeBlock.of(c) == UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS)).count(); long ratio = (int)(((countKanji * 1.0)/countAll)* 100); outputList.add(String.format("%d%%,%s,%s",ratio,cols[0],cols[1])); }); Files.write(Paths.get(outPutFile), outputList, Charset.forName("SHIFT_JIS"),StandardOpenOption.TRUNCATE_EXISTING); } catch (IOException ex) { ex.printStackTrace(); } } }
euledge

2018/11/14 00:54

まずはコンパイルエラーの件ですが、手元の環境 (java version "1.8.0_151") で試しましたが、importを使用するもののみにしてみたところ問題なくコンパイルは出来ました。 使用するものは、以下のもののみですね。 import java.nio.file.Path; import java.nio.file.Paths; import java.lang.Character.UnicodeBlock; import java.nio.charset.Charset; import java.nio.file.Files; import java.util.ArrayList; import java.util.List; その後、実行してみましたが Files.writeにオプション StandardOpenOption.TRUNCATE_EXISTING を指定するとそのファイルが存在していないとだめなようなのでオプションを除きました。 Files.write(outputFilePath, outputList, Charset.forName("SHIFT_JIS")); Files.readAllLines(inputFilePath);は全件読みにいくので、大量の行がある場合は stream使うほうがいいですね。 try (Stream<String> stream = Files.lines(inputFilePath)) { stream.forEach(line -> { // ここで行単位の処理   } }
euledge

2018/11/14 00:58

レビュー本文に,が含まれる件は以下のように分割数の最大を2にすれば解決します。 String[] cols = line.split(",", 2);
menuett

2018/11/14 03:57

回答ありがとうございます。 コンパイルは無事通りました。 しかし、実行するといくつか下記のようなエラーが出ます。 pc_review.csvを読み込んだ場合 27%,?229,"Rポイント・楽天Edy兼用カードを購入し、 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at KanjiSample.lambda$main$1(KanjiSample.java:21) at java.util.Iterator.forEachRemaining(Unknown Source) at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source) at java.util.stream.ReferencePipeline$Head.forEach(Unknown Source) at KanjiSample.main(KanjiSample.java:19) rd_review.csvを読み込んだ場合 Exception in thread "main" java.io.UncheckedIOException: java.nio.charset.MalformedInputException: Input length = 1 at java.io.BufferedReader$1.hasNext(Unknown Source) at java.util.Iterator.forEachRemaining(Unknown Source) at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source) at java.util.stream.ReferencePipeline$Head.forEach(Unknown Source) at KanjiSample.main(KanjiSample.java:19) Caused by: java.nio.charset.MalformedInputException: Input length = 1 at java.nio.charset.CoderResult.throwException(Unknown Source) at sun.nio.cs.StreamDecoder.implRead(Unknown Source) at sun.nio.cs.StreamDecoder.read(Unknown Source) at java.io.InputStreamReader.read(Unknown Source) at java.io.BufferedReader.fill(Unknown Source) at java.io.BufferedReader.readLine(Unknown Source) at java.io.BufferedReader.readLine(Unknown Source) ... 5 more
menuett

2018/11/14 04:30 編集

どうしてこうなるだろうと試してみると おそらくスペースなどが読み込みをストップさせているようです。 手動で空白を削除して実行しなおしたら 17%,?229,"Rポイント・楽天Edy兼用カードを購入し、クレカからのチャージがしたかったのでこちらを購入。当方PC環境はWindows8.1、IE11。 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at KanjiSample.lambda$main$1(KanjiSample.java:21) at java.util.Iterator.forEachRemaining(Unknown Source) at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source) at java.util.stream.ReferencePipeline$Head.forEach(Unknown Source) at KanjiSample.main(KanjiSample.java:19) 上記のように読み込みが進みました。見る限り、句読点の直後にスペースが出来ているようです。 これは、私がcsvを作るにあたって、Excelに楽天のレビューを一つずつ手動で入れていくという形で作成したので、データとしては整っていない結果だと思います。 回答いただいたコードは全く問題ないです。 できれば、こうした空白などによる読み込みのストップを防ぐ方法、また今回のエラーがどういうことなのかなどを回答いただけたら嬉しいです。
menuett

2018/11/14 04:12

レビューデータの一部を載せます。Excelで作成し、メモ帳で閲覧しています。 メモ帳で閲覧していると一行に見えるのですが、実際貼り付けるとレビューサイトからコピーした通り、 改行などがされているので、こうしたことも読み込みをストップさせる原因なのだと思います。 rd_review.csv 907,"キモパンのキモさ(起毛具合)が物足りなかったのでこちらも試しに購入。 これぞ起毛!キモパンよりも断然暖かい。 し○むらのあったかパンツと類似しているとのことで、購入して比較してみました。 ※写真はカーキがぬくパン、ブラックがし○むら 159cm56kg下半身デブ。 ぬくパンはLサイズ、し○むらは70サイズ購入。 どちらも毛やほこりの付きやすい生地。 ぬくパンのほうが股上が深い。し○むらは前のみ浅め。 し○むらの方が細身で穿いたときに足が太く見えません。起毛が厚いのに不思議。 起毛の質感はし○むらがマイヤー毛布、ぬくパンはフリースって感じ。 ポケット裏の生地もし○むらのが暖かみあり。 裾を折り返すのはどちらもダサイ。長めなのでくしゅくしゅするしかないかな。 総じてし○むらの方が優れているが、近くに店舗がならこちらでも十分かと。 ------ 11/26に投稿されたレビューを読んだら超絶腹が立ったので、物申させていただきます。 失礼ですが問題のレビューを引用 ↓ 『形と色が超絶ダサい。 私20代前半ですが、これ1枚履くだけですぐにダサいおばちゃんになれます。スキニーだと書いてあったのに完全にストレートです。今時、ストレートなんて書いてあったら売れないですもんね。 このダサいシルエットのパンツに高評価してる人は30代40代50代がほとんど。見事にリアルおばちゃんばかりですね。』 ↑ はい、30代40代50代の超絶ダサいおばちゃま方、どう思われますか? 「見事にリアル性格ブスなアナタも、残念なことにあと数年でおばちゃんですね。 深キョンや石田ゆり子の顔を見てから、鏡見てみたら? あぁリアルおばちゃん相手に完敗、おばちゃん以下だわぁ~。 石原さとみも残すところ一か月弱でおばちゃん化。残念すぎる。 心の中で思うのはいいとしても、大衆の目に触れるレビューに書くって非常識よね、頭おかしいわよね。 よっぽど頭の悪い親に育てられたんでしょうね。 親ばっかりは選べないものねぇ・・・無能で最低な親から出てきたとか超絶可哀想すぎるw」 そう思っちゃいました。 これって商品レビューというよりは、30代40代50代に対する誹謗中傷ですよね。 すぐさま“不適切なレビューを報告する”をディカプルクリック(10連打)しましたよ~。 全国の30~50代のおばちゃま方、共に連打しましょう! こんなん楽天出禁でいいと思うわ。 おばちゃんなのに大人げなくてごめんなさいね。テヘペロ" 598,"痩せてる方の投稿が目立つので、恥を忍んで書いてみます。 身長156センチ体重68キロ ウエスト約80ヒップ約100太腿約60の見紛うことなきデブです ここまで太っていると着痩せするかより「自分の体がおさまるか」が問題なんですよね。 LLサイズを購入しました。 お腹は若干キツイしお尻も脚もパツパツでしたが入りました。 内腿はもちろん摩れるので耐久性はこれからチェックすることになりますが、 縫製は折り伏せ縫いでしっかりしてそうなのでこの冬くらいは持ってくれるんじゃないかなと思います。 ここまで太いと履いたら自分の脚の形なので美脚もなにもあったもんじゃなく、肉感拾いまくり肉肉しすぎで見苦しい見た目でないことが大事なのですが コートやチュニック丈のトップスとかで太腿半分くらいまで隠せば、そこまで見苦しくはないかなと思います。 子どもの送り迎えや公園等で活用していきたいです。" 111,"今回はコーデュロイのアイボリーにしました。履いたサイズ感は、あったかパンツと同じでした。歩くと股の間がすれるのか キュッキュッと音がします(笑) なので、すれて毛玉になるかもと思っていますが、履き続けてみないと分かりませんね。ホワイトとの色の違いを写真でのせますので、みなさんの参考になればと思います。Mサイズ購入156cm、50kg。典型的なオバチャン体型でお腹ポッコリですが(笑) パンツの丈はこの長さがとても足首が暖かく、昨年の物よりも気に入っています。 *インディゴMを2本買いましたが、サイズが全然違っていて、びっくりでした。 1本はL?と思い何度もタグをみましたが Mでした。1本はぴったり、1本はゆるいぶんまた上が深くなりちょっと、イヤな感じでした。どうも同じサイズでもバラツキがあるようですね。" 89,"163cm、57kg(時々58kg希に56kg)です。 主人からは、特に下半身がぽっちゃりしてる、と言われます。 サイズ選びは本当ーに悩みました。 色々な方のレビューを参考に最終的にブカブカは嫌だなぁとLサイズで決心しました笑 今まで履いてきたパンツの中でもこちらは比較的、ピチピチしてますが、事務仕事で1日履いてみたところ、すごく動きやすいし、きもちーし、馴染んできてサイズもぴったりだと思いました! あとは、太ももエクササイズでもしてもう少しゆとりを出すしかないです泣 丈に関しては、最初は長いかなぁーと思いましたが、動いてるうちに上に上がってきて、くるぶし位になってます笑 そのせいか私は気になりませんが、膝あたりに皺がよってます。 色は、シャメだと明るめに写ってますがモデルさん達が着てる色味だと思います。 とても気に入ったので、いい買い物が出来たと満足です。 履いてみて納得したので★4から★5に変更です!" 72,"身長156、体重55キロの小デブです。 最近はガウチョが流行り、ワイドパンツが流行る中、ストレートタイプはラインを拾うのですっかり履かなくなってしまつていましたが、これは良いです! あったか&美脚!! コートなどと合わせるとガウチョなどだと私の身長ではなかなか難しそうだったので、あと2着位色チで欲しいです。 因みにLサイズでいい感じでした。 短足なのでちょっと足元もたつきますが、お直しするほどではないです。 インディゴの色もいい感じでした。" pc_review.csv 229,"Rポイント・楽天Edy兼用カードを購入し、クレカからのチャージがしたかったのでこちらを購入。当方PC環境はWindows8.1、IE11。 USBリーダーのカード認識は良好。 (蓋を開けるときはやや力が必要ですがw) 残高照会などもスムーズに行えます。 クレカのチャージにはEdy viewer内の メニュー登録で情報を登録し、2日ほど手続きに時間を要します。 さて、ここまでは接続してからの使用感。 この接続までがかなり大変でした(-_-; 製品に同梱されている説明書は SONY製品説明書と楽天Edyリーダーセットアップガイド。 どちらも大体同じような内容が書いてます。 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 1.説明書に従いUSBを差し込む→自動インストールが始まらない(#T-T) 2.説明書の「ご注意」に「Felicaネットインストーラー」を インストールすると書いてある。 URLも記載されているが、とっても長いのでWeb検索で探す。 3.「Felicaネットインストーラー」は旧称・・・ この時点で紙の説明書は古いことを知る(#T-T) 新「NFCネットインストーラー」をダウンロードしインストール。 4.インストールされた自己診断ツールを起動しEdyカードが認識することを確認。 5.Felicaランチャーを起動しボーリングをオン。リーダーの上にカードを載せて 自動で開くメニューからEdy viewerを選択、あとは残高照会やらクレカ登録できる手順・・・ ここまで試行錯誤の2時間。 ところが楽天Edyサイト内に もっと簡単な「初めてEdyリーダーを使用する方へのマニュアル」がありました・・・ 6.マニュアルに従いすべての手順を再度やり直し。 (マニュアルではNFCポートウェアをインストールすることになってます。) さっきまでの時間を返してほしい・・・(#T-T) 7.無事登録完了。 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ というわけで、同梱された説明書では用が足りません(笑) 購入された方はマニュアルを参考にセットアップした方が近道だと思います・・・ (検索窓に「楽天Edy Edy viewerとは」を入れればサイトにたどり着けます。) さて接続まで奮闘しましたが、 Webサイト上にこんな簡単なマニュアルがあるなら 説明書にそちらを参照くださいってQRコードくらい載せてほしいってことで ☆3つです(o´д`o)=3" 111,"とても便利ですが、皆さんのレビューに書かれているように、 説明書にもう一言あればと感じました。 説明書では、大まかに書きますと、 1:本体をPCにさせば自動で認識し、インストールします。 再起動を求められたら画面の指示に従う。 2:お使いのPCにFeliCaプラットフォームマークがなければ手順3へ。 FeliCaプラットフォームマークのある方は、 Windowsスタートボタン→すべてのプログラム→FeliCaポート→FeliCa自己診断。 3:本製品にEdyカードをセットし、自己診断ツールで動作確認を行う。 自己診断にて×表示の場合、自己診断画面の指示に従って下さい。 私のPCにはFeliCaプラットフォームマークはなく、 インストール後、Windowsの中にもFeliCaポートが入っておりませんでした。 その代わり、NFCポートというものが追加されており、 これで自己診断が可能という事が解りました。 その後、「NFCポート」で検索したところ、ソフトのダウンロードが必要でした。 ダウンロード→インストール→電子マネービューワーをセットアップ。 ソフトを立ち上げ、電子マネービューワーを押すと、 対象電子マネーのアイコンが出てくるので、 利用したいアイコンを押し、カードをセットすれば残高等の確認が出来るように なりました。 確かこのような手順でEdy、nanako、Suica、waonの電子マネーが使用可能に なったと思います。 大変便利なのですが、若干不親切な説明書だと感じてしまいました。 お値段ももう少し安ければ、と、私は思います。" 86,"今年6月、楽天Edyスタート記念を機に最大1000ポイントプレゼントという謳い文句に釣られてカードを申し込みました。 ただし、Edy決済方法をもっとよく理解してから買うべきでした。我が家のパソコンにはFelicaポートが付いていないため、専用のEdyリーダーが必要だとすぐに気付いてご注文し、同梱発送をお願いしました。しかし同日の追加注文なのに、ショップさんは「すでにご注文いただいた時点でそれぞれが注文確定しています。確定後の変更や同梱はできません」とか何とか断られました。当方がEdyの扱いに関して無知だったから仕方がないと言われればそれまでですが。 それと、リーダーのソフトのインストールの仕方が分かりにくかったです。使えるようになるまで、かなり時間がかかりました。パソコンに詳しくない人にでも分かりいやすいような説明書を付けて欲しかったです。現在、ようやく馴れて便利に使えるようになりました。 楽天Edyオフィシャルショップ・・・商品説明不足な上に、融通のきかない不親切なお店です!!!" 48,"いままでEdyの必要性も無ければ、履歴確認のためだけにリーダーを買う意味も見いだせませんでした。 今回クロネコメンバーズカードの申し込みでたまたまEdy付きにしたのでいろいろ調べ、一ヶ月検討した結果期間限定ポイントも多かったことから勢いで買うことにしました。 レビューで書かれている事を参考に覚悟もしていたので、たとえキャップが硬くて外し難かろうが、DLでごねられようが「想定内」と思い設定しました。 Edyはもちろん履歴も見れ、クレカの設定もしたのでチャージも出来ました。 モバイルSuicaについては履歴は見れました。クレカ設定は後日する予定です。 WAONについてはもちろん履歴は見れましたがイオン系のクレカを持っていないので残念ながらチャージは今後の課題です。 ただ、私にとって一番このリーダーを使えると思ったのはWAONに関してです。 EdyもSuicaも周りでは使える店が無いので旅行先でしか使用しないと思いますが、WAONは日頃よく使います。 WAONステーションの項目の多さにいつも手間取ってしまい一筋縄ではいかない経験が多かったのですが、WAONネットステーションなる存在を知って「もしコレ使えたら…」と実は一か八かで賭けました。 ショップに問い合わせしたところ当然ですがEdy以外のICカード利用については動作保障外で検証もしていないとのごもっともな回答でしたが、入っていた説明書はSONYのRC-S360/Sのもの。あと楽天リーダーセットアップガイド。 とりあえずWAONネットステーションで他サイトから移行したポイントのDLおよびWAONポイントのWAONへの交換をやったところ問題なく出来ました。 これが出来ただけでも私にとっては買った価値のあるものとなりました。 なので☆5で! 自分にとってどの程度価値があれば買ってもいいという基準にさえ達すれば決して高い買い物とも言わないと思います。 使う直前に履歴を見て大体使う金額をチャージしておけば、いちいちしてもらう手間も後ろの人を待たせる時間も解消されるわけですし。 ちなみにWindows 7 professional 64ビット使用です。USB2.0と3.0両方で使えました。 机の上にスペースが無いのでUSB型のリーダーは場所を気にせず私には本当にありがたいです。 あと、話は少し変わりますがクロネコメンバーズは楽天Edyデビューキャンペーンの対象とはならないようです。 スーパーポイントに関してはメンバーズの方から登録手続きして貯めることが出来ます。"
euledge

2018/11/14 04:16

レビューの中にある改行が問題なのでは?
euledge

2018/11/14 04:24

読み込むプログラム側ではどの改行がデータの区切りでどの改行がレビュー中の改行なのかを判断することは難しいので、データをきちんと作ることが必要だと思いますよ。Excelでデータ作っているならExcel側でレビュー中の改行削除とかできるのでは無いでしょうか? http://cblog.crie.jp/excel/48/
menuett

2018/11/14 05:23

回答ありがとうございます。 改行や空白を削除した後にコードを実行すると必ず Exception in thread "main" java.io.UncheckedIOException: java.nio.charset.MalformedInputException: Input length = 1 at java.io.BufferedReader$1.hasNext(Unknown Source) at java.util.Iterator.forEachRemaining(Unknown Source) at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source) at java.util.stream.ReferencePipeline$Head.forEach(Unknown Source) at KanjiSample.main(KanjiSample.java:18) Caused by: java.nio.charset.MalformedInputException: Input length = 1 at java.nio.charset.CoderResult.throwException(Unknown Source) at sun.nio.cs.StreamDecoder.implRead(Unknown Source) at sun.nio.cs.StreamDecoder.read(Unknown Source) at java.io.InputStreamReader.read(Unknown Source) at java.io.BufferedReader.fill(Unknown Source) at java.io.BufferedReader.readLine(Unknown Source) at java.io.BufferedReader.readLine(Unknown Source) ... 5 more このエラーばかりが出ます。このエラーはよく分かりませんが、 どうにか自分でやってみます。ありがとうございました。
guest

0

java

1BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(reviewFile),"utf-8"));

FileInputStream

FileInputStreamは、ファイル・システム内のファイルから入力バイトを取得します。どのファイルが有効であるかはホスト環境に依存します。
FileInputStreamは、イメージ・データなどのrawバイトのストリームを読み込むときに使用します。文字のストリームを読み込むときは、FileReaderを使用してください。

たぶんですが、rawデータとして読み込んだために、改行文字などが認識されず1行で読まれたのでは?
このドキュメントの通り、FileReaderを使って次のように書くといかがでしょう?

java

1BufferedReader br = new BufferedReader(new FileReader(reviewFile),"utf-8");

投稿2018/11/12 16:17

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

menuett

2018/11/14 03:58

失礼しました。間違って送ってしまいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問