• 締切済み

キーボードからの文字列検索

いつもお世話になっております。 文字列検索をするプログラムを作っているのですが、キーボードから検索したい文字を入力して検索する方法がわかりません。コマンドラインからの検索はできたのですが、スペースが入ると思うように検索できないんです。 どなたかご教授頂けると大変うれしいです。 よろしくお願い致します。 import java.io.*; import java.util.*; class Search{ public static void main(String[] args) throws IOException, InterruptedException{ FileInputStream fis = new FileInputStream("input.txt"); InputStreamReader in = new InputStreamReader(fis); BufferedReader br = new BufferedReader(in); String msg = br.readLine(); Camera mySearch = new Camera(); String target = (args[0]); mySearch.setFocus(target.length()); BufferedReader console = new BufferedReader(new InputStreamReader(System.in)); System.out.println(msg); for(int i = 0; i < msg.length(); i++ ){ mySearch.shift(msg.charAt(i)); if(mySearch.compare(target)){ System.out.println("Pattern '" + target + "' is found at index of " + (i - target.length() + 1)); break; } } } }

  • Java
  • 回答数3
  • ありがとう数0

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>キーボードから入力して検索できる方法を教えていただけないでしょうか? 何がわからないのかよくわからないのですが、 質問文のプログラムで >String target = (args[0]); のかわりに String target = console.readLine(); すればいいだけのように思うけど 補足質問の意図を勘違いしてたらすみません

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1の argv は args の間違い

bmwm52006
質問者

補足

なるほど、そういう方法があったんですね! 補足なんですが、コマンドの画面で検索を促してから、キーボードから入力して検索できる方法を教えていただけないでしょうか? この方法かっこ悪くて‥。お手数かけます。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

>スペースが入ると思うように検索できないんです。 スペースが入るとダメなのは、 java prog search string の様にスペースが入ると argvに別々に入るためです。 java prog "search string" のように入力してやらないといけません

関連するQ&A

  • キーボードから文字列を入力する際の質問です。

    キーボードから文字列を入力する際の質問です。 どうしてもカタカナでしか日本語の入力が出来ません。 ローマ字入力です。 import java.io.*; class Sample4 { public static void main(String args[]) throws IOException { System.out.println("文字列を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); System.out.println(str + "が入力されました。"); } }

    • ベストアンサー
    • Java
  • スペースを含めた文字列の検索

    大変お世話になっております。 文字列を検索するプログラムを作っていたのですが、スペースを含んだ検索がうまくいきません。単語自体を探し当てる事は出来るのですが、「ve p」のようなスペースを含めて検索した時にはたとえそれがテキストに含まれていたとしても探し当てられないんです。 スペースを含めても探し当てられる方法を教えていただけると大変助かります。 よろしくお願いいたします。 サンプル input.txt 「My name is Java and I love programming」 ------------------------------ import java.io.*; import java.util.*; class Search{ public static void main(String[] args) throws IOException, InterruptedException{ FileReader reader = new FileReader("input.txt"); Scanner in = new Scanner(reader); int n = 0; int noLines = 0; String s = ""; System.out.println("Please insert a pattern name for searching:"); BufferedReader console = new BufferedReader(new InputStreamReader(System.in)); String target = console.readLine(); outerLoop: while(in.hasNextLine()) { s = "" + in.nextLine(); noLines ++; Scanner in2 = new Scanner(s); while(in2.hasNext()){ if(target.equals(in2.next())){ System.out.println("Pattern '" + target + "' is found at the line of " + noLines); break outerLoop; }       }     }  } }

    • ベストアンサー
    • Java
  • Javaでキーボードから入力された文字列をソートするプログラムについて。

    Java初心者です。今回、タイトル通りのプログラムを作成する事になったのですが、 import java.io.*; import java.util.*; public class dicsort { public static void main(String args[]) throws NumberFormatException, IOException{ String[] diclist = new String[4]; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); for(int i=1; i<diclist.length; i++){ System.out.print("ソートしたい単語を入力して下さい。"+i+"語目"); diclist[i] = in.readLine(); } Arrays.sort(diclist); System.out.println("答えは"); for(int n=1; n<diclist.length; n++){ System.out.println(diclist[n]); } System.out.println("である。"); } } というプログラムを実行したところ、 ソートしたい単語を入力して下さい。1語目あさ ソートしたい単語を入力して下さい。2語目さか ソートしたい単語を入力して下さい。3語目かさ Exception in thread "main" java.lang.NullPointerException at java.util.Arrays.mergeSort(Unknown Source) at java.util.Arrays.sort(Unknown Source) at dicsort.main(dicsort.java:11) というエラーが発生してしまいました。 ソートの部分で問題が起きているらしいのですが、自分では考えが凝り固まってしまい間違いが発見出来ません。 どなたか原因を教えて頂けないでしょうか、よろしくお願いします。

  • BufferedReader.readline()で読み込んだ文字列の

    BufferedReader.readline()で読み込んだ文字列の長さがおかしい。 質問させてください。 BufferedReader.readline()を使用して入力した文字列の長さを表示させると、値が正しく表示されません。 例えば、「東京都千代田区」と入力した場合、長さは9と表示されます。 (東京都と入力すると長さは3と表示されます) どなたか原因をご存知ありませんでしょうか。 コードを以下に記載します。 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Question_1_1 { /* * メイン関数 * @param args 起動引数 */ static public void main(String[] args) throws IOException{ InputStreamReader input = new InputStreamReader(System.in); BufferedReader buff = new BufferedReader(input); String str = ""; System.out.println("文字列入力>"); str = buff.readLine(); System.out.println("文字列長さ : " + str.length()); // ストリームを閉じる input.close(); buff.close(); } }

    • ベストアンサー
    • Java
  • 文字化けについて

    以下のコードでコンパイルして日本語入力すると 文字化けします。 どうすれば文字化けしなくできますか? new InputStreamReader(System.in)のところもEUC_JPにしたりしたのですが文字化けしてしまいました(汗) import java.io.*; public class test { public static void main(String agrs[]) { try { BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); String boyname,girlname; int goukei=0; System.out.println("男性の名前を入力してください"); boyname=in.readLine(); System.out.println(boyname); char boynameChar[]=boyname.toCharArray(); for(int i=0;i<boyname.length();i++) { goukei+=(int)boynameChar[i]; } System.out.println("女性の名前を入力してください"); girlname=in.readLine(); char girlnameChar[]=girlname.toCharArray(); for(int i=0;i<girlname.length();i++) { goukei+=girlnameChar[i]; } System.out.print(boyname+""と+girlname+"の相性は"+goukei%100+"%"); in.close(); } catch(IOException e) { } } }

    • ベストアンサー
    • Java
  • 今勉強中のjavaで。わからないことがあります。

    import java.io.*; class Ireru { public static void main(String args[]) throws IOException{ System.out.println("あなたは何歳ですか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); int num =Integer.parseInt(str1); System.out.println("あなたは" + num +"歳です。"); } } ------------------------------- import java.io.*; class Ireru { public static void main(String args[]) throws IOException{ System.out.println("あなたは何歳ですか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); System.out.println("あなたは" + str1 +"歳です。"); } } なぜ下では悪いのですか?なぜnum をつかないといけないかがわかりません。正確には str1とnumの違いがわからなくて困っています。何が混乱の原因ですか?

    • ベストアンサー
    • Java
  • 【初心者です】大文字←→小文字

    import java.io.*; public class ex52a { public static void main(String[] args) throws Exception { BufferedReader in = new BufferedReader(new InputStreamReader (System.in)); while(true) { System.out.print("String> "); String s = in.readLine(); if(s.equals("")) { break; } String res = ""; s = s.toUpperCase(); s = s.toLowerCase(); res = s; System.out.println(res); } } } これだと、大文字は小文字になるのに、小文字は大文字になりません。 単純に二つ並べるだけでは駄目なのでしょうか...

    • ベストアンサー
    • Java
  • StringTokenizerについて

    ファイルの読み込みをStringTokenizerを使ってやりたいのですが、 使い方がいまいち理解できません。今自分で作っているプログラムでは効率が悪いです。 プログラムの一部を載せるのでアドバイスお願いします。 <プログラム> InputStreamReader fisr = new InputStreamReader(client. getInputStream()); BufferedReader fin = new BufferedReader(fisr); String name = fin.readLine(); System.out.println(name); while(n!=10){ FileInputStream objFis = new FileInputStream("eitango"+rand[n]+".txt"); InputStreamReader objlsr = new InputStreamReader(objFis,"Shift_jis"); BufferedReader objBr = new BufferedReader(objlsr); PrintWriter out = new PrintWriter(client.getOutputStream(),true); //1行ずつファイルを読み込む if (n==0){ out.println("Hello,clientNo:" + number +"\n"); } for(a=0;a!=6;a++){ if(a==5){ String ans = objBr.readLine(); ans2 = ans.length(); System.out.println("ans2 = "+ans2); } if(a!=5){ out.println(objBr.readLine()); } }

    • ベストアンサー
    • Java
  • UNICODEへの文字コード変換

    以下のようにして、 日本語で書かれたファイルを読み込んで、 UNICODEに変換したいのですが、 できません。。。 どこが間違っているのでしょうか?(;;) 元の日本語ファイル「こんにちは」 >>できたファイル「\u3053\u3093\u306b\u3061\u306f」 という風にしたいのですが。。 //FileIOSteramの作成 FileInputStream fis = new FileInputStream(iFile); FileOutputStream fos = new FileOutputStream(oFile); //Stream ラップ InputStreamReader in = new InputStreamReader(fis, "EUC-JP-LINUX"); OutputStreamWriter out = new OutputStreamWriter(fos, "UTF16"); System.out.println(System.getProperty("file.encoding")); //読み込みと書き込み int c; InputStreamReader in = new InputStreamReader(fis, "Unicode"); Writer out = new Writer(fos); while((c = in.read()) != -1){ out.write(c); }

  • Arraylistを使用し売上集計のコード作成

    プログラミング課題で質問です。 売上集計でCSVからデータを読み込み 支店データ 000,沖縄 001,北海道 というデータファイルと 商品データ SE001,テレビ SE002,レンジ というデータファイル 売上データ”.rcd”拡張子ファイル 支店:001 商品:SE001 売上金額:29800 というデータが入っているファイル この3つのファイルをArraylistを使用し作成しています 最後は支店ごとの売上金額と商品ごとの売上金額を 集計しなければなりません。 理想では売上データファイルと商品データファイルの3項目に売上金額の項目を追加する ように作成したいです。 初心者でわかりにくい説明だとは思うのですが ご指導ください。 いきずまってしまって進めません。 考え方などもまだまだなので一応今できているコードを記載します 途中までですが。。。。。。。 解説などで教えてもらいたいです。 *********************************public class UriageSyukei { public static void main (String[] args) { //指定されたディレクトリ File directory = new File(args[0]); /* * 1.支店定義ファイル * */ File branchFile = new File(directory + "\\branch.lst"); //変数を宣言 FileInputStream fis = null; InputStreamReader isr = null; BufferedReader br = null; ArrayList<List<String>> branchData = new ArrayList<List<String>>(); //支店定義ファイル処理 try { if (!branchFile.exists()) { System.out.println("支店定義ファイルが存在しません"); return; } fis = new FileInputStream(branchFile); isr = new InputStreamReader(fis); br = new BufferedReader(isr); String line ; while ((line = br.readLine()) != null) { List<String> branch = line.split(","); //配列の長さ if (branch.length != 2 || branch[0] == null || branch[1] == null) { System.out.println("支店定義ファイルのフォーマットが不正です"); return; } branchData.add(branch); } /* * 2.商品定義ファイル */ File commodityFile = new File(directory + "\\commodity.lst"); ArrayList<String[]> commodityData = new ArrayList<String[]>(); //商品定義ファイルの処理 if (!commodityFile.exists()) { System.out.println("商品定義ファイルが存在しません"); return; } fis = new FileInputStream(commodityFile); isr = new InputStreamReader(fis); br = new BufferedReader(isr); while ((line = br.readLine()) != null) { String[] commodity = line.split(","); //配列の長さ if (commodity.length != 2 || commodity[0] == null || commodity[1] == null) { System.out.println("商品定義ファイルのフォーマットが不正です"); return; } commodityData.add(commodity); } /* * 3.集計 */ //.rcdに該当する拡張子を検索 ArrayList<String[]> salesData = new ArrayList<String[]>(); String[] salesFiles = directory.list(); for (String salesFile : salesFiles) { if (!salesFile.endsWith(".rcd")) { continue; } File rcdFile = new File(directory + "\\" + salesFile); fis = new FileInputStream(rcdFile); isr = new InputStreamReader(fis); br = new BufferedReader(isr); String salesBranch = br.readLine(); String salesCommodity = br.readLine(); String price = br.readLine(); *************************************** できているのはここまでです。 途中修正などたくさんあると思いますが これを元に作成していきたいので教えてください よろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう