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

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

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

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

Q&A

解決済

3回答

5109閲覧

textの中の指定した行までを削除するものを作ったのですが、1行ずつ開けて削除されています。

santora

総合スコア11

Java

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

0グッド

0クリップ

投稿2018/08/08 11:22

java

1import java.io.BufferedReader; 2import java.io.BufferedWriter; 3import java.io.IOException; 4import java.nio.charset.Charset; 5import java.nio.file.Files; 6import java.nio.file.Paths; 7import java.util.List; 8import java.util.stream.Collectors; 9 10public class Remove { 11 12 public static String altsdir; 13 14 15 public static void main(String[] args) throws IOException { 16 remove(); 17 } 18 19 public static void remove() throws IOException { 20 List<String>list=null; 21 try(BufferedReader br=Files.newBufferedReader(Paths.get("doc.txt"),Charset.forName("MS932"))){ 22 list=br.lines().collect(Collectors.toList()); 23 System.out.println("read"); 24 } 25 for(int a = 0; a < 7; ++a) { 26 list.remove(a); 27 System.out.println("remove"); 28 } 29 try(BufferedWriter bw=Files.newBufferedWriter(Paths.get("doc.txt"),Charset.forName("MS932"))){ 30 list.stream().forEach(line->{ 31 try { 32 bw.write(line); 33 bw.newLine(); 34 } catch (Exception e) { 35 e.printStackTrace(); 36 } 37 }); 38 } 39 } 40}

doc.txtは
1
2
3
4
5....
というようなのですがどこが悪いのでしょうか?

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

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

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

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

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

guest

回答3

0

原因としては、既にpepperleafさんがご指摘のとおりです。


せっかく BufferedReader#lines を使ってストリームを取得しているのですから、
collectするまえに Stream#skip を用いれば良いです。

ついでに。一旦リスト化する必要性もいまいち感じられません。

投稿2018/08/08 11:54

編集2018/08/08 12:03
LouiS0616

総合スコア35658

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

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

0

ベストアンサー

for(int a = 0; a < 7; ++a) {
list.remove(a);

ループで一行ずつ消したつもりでしょうが、最初の行を消すと次の行が先頭になり、2行目を消しているいるつもりが、元の 3行目を消すことになります。 以下、同様。

先頭から、7行ならば、単純に

for(int a = 0; a < 7; ++a) {
list.remove(0);

もっと簡単な方法もあった気もしますが、とりあえず。

投稿2018/08/08 11:28

pepperleaf

総合スコア6383

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

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

0

for文で要素を削除するなら、数字の大きい方から逆順に削除します

for(int a = 6; a >= 0; a--) {

投稿2018/08/08 12:09

y_waiwai

総合スコア87715

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問