1

たとえば、本の各行の内容を含むテキストファイルがあり、本のそれらの行の特定の単語を検索するJavaプログラムがあります。

これはプログラムです:

import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;


public class AliceSearch {


    public static void main(String[] args) throws Exception {

        ArrayList<String> aiw = new ArrayList<String>();
        ArrayList<String> matches = new ArrayList<String>();
        Scanner scan = new Scanner(new File("aiw.txt"));
        Scanner input = new Scanner(System.in);

        while (scan.hasNext()){
            aiw.add(scan.nextLine());
        }

        String searchTerm;

        System.out.print("Please Input Search Parameter : ");

        searchTerm = input.nextLine();

        boolean itemFound = false;

        String currItem = null;

        for(int i = 0; i<aiw.size(); i++  ) {
            currItem = (String)aiw.get(i);

            if (currItem.contains(searchTerm)) {

                matches.add(currItem);

                itemFound = true;

            }
        }

        System.out.println("");

        if ( itemFound == false ) {

            System.out.println ( "No results containing "+searchTerm );

        }else{

            System.out.println ( "We Found the following results : " );

            for(int r = 0; r < matches.size(); r++){
                System.out.println("");
                System.out.println(matches.get(r));
            }
        }

        scan.close();
        input.close();

    }

}

searchTerm出力されるとき(またはmatches ArrayListに配置されるとき)、結果の各行のfromを大文字にします。どうすればいいですか?私はあなたが使用していることを知っています.toUpperCase();が、私は今、単語の文字列内の1つの単語を変更する方法を知りません。

前もって感謝します!

4

3 に答える 3

2

今のように出力する代わりに:

System.out.println(matches.get(r));

使えない

System.out.println(matches.get(r).replace(searchTerm, searchTerm.toUpperCase()));

見つかった単語を大文字のバージョンに置き換えるために使用されるメソッドのJavaDocは次のとおりです。replace()持っている方がいいでしょう

String uppercase = searchTerm.toUpperCase();

ループの外側で使用する

System.out.println(matches.get(r).replace(searchTerm, uppercase));
于 2013-01-14T14:06:06.640 に答える
1

Stringユースケースに正確に適合する方法があります。

line.replace(word, word.toUpperCase());
于 2013-01-14T14:06:07.763 に答える
0

これは、パターンの置換機能を使用して簡単に実行できます。確かに、部分的に大文字の単語(たとえば、文の先頭)を強調表示する必要があるため、フラグを使用してパターンを作成する必要があります。単に使用することはできませんString.replaceAll()

 Pattern highlight = Pattern.compile(
   Pattern.quote(word), Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE );
 String hw = word.toUpperCase();
 line = highlight.matcher(line).replaceAll(hw);

最初の2行は、単語がわかったらすぐに事前に準備する必要があります。見つかった行ごとに新しく再計算する必要はありません。Pattern.quoteは予約文字を引用するため、特別な意味はありません。

于 2013-01-14T14:06:17.377 に答える