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

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

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

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

Q&A

解決済

2回答

2686閲覧

入力された文字列とテキストファイル内の文字列を比較する

Ayatill

総合スコア1

Java

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

1グッド

0クリップ

投稿2020/05/15 15:24

編集2020/05/16 00:14

前提・実現したいこと

ユーザーが入力したユーザー名とパスワードを、
DBに見立てたテキストファイルを読み込んで照合し、ユーザー認証をしたいです。

該当のソースコード

//入力ストリームの生成 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedReader bufferedReader = null; try { //テキストリスト FileLoad fileLoad = new FileLoad("/Users/test/UserInformation"); // BufferedReaderクラスのreadLineメソッドを使って1行ずつ読み込み表示する bufferedReader = new BufferedReader( new InputStreamReader(new FileInputStream(fileLoad.Load()), "Shift-JIS")); List<String> TextList = new ArrayList<>(); String userName = br.readLine(); String password = br.readLine(); //テキストリストを参照して、ユーザー認証をする String data; while (true) { data = bufferedReader.readLine(); if (data == null) { break; } TextList.add(data); System.out.println(data); } // データを分解する TextList.forEach(lineData -> { List<String> dataList = Arrays.asList(lineData.split(":", 0)); dataList.forEach(u -> { if (u.equals(userName)) { dataList.forEach(p -> { if (p.equals(password)) { System.out.println("正常にログインできました"); } else { System.out.println("ユーザー名、またはパスワードが一致しません"); } }); } else { System.out.println("ユーザー名、またはパスワードが一致しません"); } }); }); break;

DBに見立てたテキストファイルの内容

USER_ID:00001 NAME:test PASSWORD:password ADMINFLG:1 RETIREFLG:0 USER_ID:00002 NAME:test2 PASSWORD:password2 ADMINFLG:1 RETIREFLG:0 USER_ID:00003 NAME:test3 PASSWORD:password3 ADMINFLG:1 RETIREFLG:0

上記のようなテキストファイルをDBに見立ててユーザー認証のように動作させたいと考えております。
ファイルの内容を一行ずつ読み取ってコロンで区切った文字列を読み込もうと考えたのですが、これだとそもそもユーザー名とパスワードを同時に認証することができないのがわかりました。
ユーザー認証は入力された文字列とファイル内の文字列を比較して行いたいと考えております。
どなたかご教示いただけませんでしょうか。

javaのバージョン
1.8.0_231
実行環境
Eclipse IDE for Enterprise Java Developers.
Version: 2019-09 R (4.13.0)

TN8001👍を押しています

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

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

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

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

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

m.ts10806

2020/05/15 22:01

パスワードが一致しないときは何も出さないんですか?
Ayatill

2020/05/16 00:11

ご回答ありがとうございます。 パスワードが一致しないときも、「ユーザー名、またはパスワードが一致しません」と メッセージを表示させるつもりです。 記載のコードに記述がなかったので修正しました。
guest

回答2

0

ベストアンサー

なんでこんなややこしいことになってしまうのでしょう?

UserInformationが正しいこと(NAME:の次の行にPASSWORD:があること・NAMEに重複がないこと等)が前提であれば、こんな感じでいいんじゃないでしょうか。

Java

1import java.io.IOException; 2import java.nio.charset.Charset; 3import java.nio.file.Files; 4import java.nio.file.Paths; 5import java.util.List; 6import java.util.Scanner; 7 8 9public class Main { 10 public static void main(String[] args) throws IOException { 11 List<String> textList = Files.readAllLines(Paths.get("/Users/test/UserInformation"), Charset.forName("Shift-JIS")); 12 13 Scanner scanner = new Scanner(System.in); 14 System.out.print("ユーザー名を入力してください:"); 15 String userName = scanner.nextLine(); 16 17 System.out.print("パスワードを入力してください:"); 18 String password = scanner.nextLine(); 19 20 int index = textList.indexOf("NAME:" + userName); 21 if (index < 0) { 22 System.out.println("ユーザー名、またはパスワードが一致しません"); 23 } else if (textList.get(index + 1).equals("PASSWORD:" + password)) { 24 System.out.println(userName + "さん こんにちは"); 25 } else { 26 System.out.println("ユーザー名、またはパスワードが一致しません"); 27 } 28 } 29}

投稿2020/05/16 02:29

編集2020/05/16 02:30
TN8001

総合スコア9321

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

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

Ayatill

2020/05/16 03:21

ご教示いただきありがとうございます。 参考にさせていただきます。
guest

0

読み取ったユーザー名とパスワードを変数にとっておいて後から照合すれば済む話ですね。

投稿2020/05/15 15:44

gentaro

総合スコア8949

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

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

Ayatill

2020/05/16 00:06

ご回答いただきありがとうございます。 そうですね。 しかし、後から照合する方法に行き詰まっています。 私の記述したコードだとロジックの組み方が間違っていてテキストファイルに記載があるユーザー名とパスワードを入力しても認証が通らなくて悩んでおります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問