2017-03-28 5 views
-2

Javaでバイナリ検索を使用して、ユーザーが指定した2つの文字列の間の文字列の数を調べるにはどうすればよいですか?私は検索するための大きなテキストファイルを持っています。 私は(単語位置2 - 単語位置1)-1)は配列から位置を与えるだろうと思っていたが、コードに入れる方法がよく分からない。私は単語のファイルをチェックした後に立ち往生した。テキストファイルで2つの文字列を検索し、文字列の数を表示する

String[] allWords = new String[400000]; 
     int wordCount = 0; 
    Scanner input = new Scanner(new File("C:\\text.txt")); 
     while (input.hasNext()) { 
    String word = input.next(); 
    allWords[wordCount] = word; 
    wordCount++; 

    System.out.println(wordCount); 
} 

    Scanner sc = new Scanner(new File("C:\\text.txt")); 
    while(sc.hasNextLine()){ 
    String in = sc.nextLine(); 

    System.out.println("Enter a string:"); 
    Scanner sc2 = new Scanner(System.in); 
    String str = sc2.nextLine(); 

    System.out.println("Enter a string:"); 
    Scanner sc3 = new Scanner(System.in); 
    String str2 = sc3.nextLine(); 

    if (str.contains(str)) { 
    System.out.println("yes"); 
} 
    if (str.contains(str2)) { 
    System.out.println("yes"); 

    } 
+0

私はこれに関するバイナリ検索の妥当性はよく分かりません。バイナリ検索はすべて「ツリー」全体を検索する必要がないことです(いくつかの順序で要素の配列はツリー内に要素を持つようなものです)。間に何点あるのか知りたければ、その間にあるすべての要素をチェックしなければなりません。要素のバイナリ検索をしてから別のものに書き換えてください。次に、バイナリ検索を再度実行する。私は本当に知りませんが。 – barlop

+0

なぜバイナリ検索ですか?ファイルを1行ずつ読み込みます。行がいずれかの文字列と等しいかどうかを確認してください。行が文字列の1つと等しい場合は、他の文字列が見つかるまでカウントを開始します。 – Sedrick

+0

だから私のコードのように一行一行読むと、カウントを始めるにはどうしたらいいですか?私はプログラミングに若干の経験があるので、ユーザーからの入力を受け取り、ifステートメントに入れるようなことをする方法がわからない。 – Mike

答えて

0

あなたの数学は正しいです。あなたが推測したように、ポジションの差から1を引きます。コードに問題がある場合は、質問を投稿してください。

+0

ありがとうございます!私は今まで自分のコードを投稿しました。 – Mike

0

この疑似コードのようなものを試すことができます。

int start 
int end 
a = startingString 
b = startingString 

String[] lines = StringFromFile.split("\n"); 

for(x in lines) 
    if(x=a) 
     start = position of x 
for(x in lines) 
    if(x=b) 
     end = position of x 
String[] newLines = Arrays.copyOfRange(lines, start,end) 
return newLines.length 
+0

ありがとう!これは物事を単純化する!だから今私は、ユーザーが2つの単語と場所を格納するための入力を持っています。私はforとifの文で苦労していると信じています。 – Mike

+0

問題はありません、私の男 – TinFellow

関連する問題