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每个结果行在输出时(或放置在匹配 ArrayList 中时)都为大写。我该怎么办?我知道您使用.toUpperCase();但我现在不知道如何更改一串单词中的一个单词。

提前致谢!

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

这可以使用模式的替换功能轻松完成。我们当然还需要突出显示部分大写的单词(例如句子的开头),因此需要创建带有标志的 Pattern,不能只使用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);

一旦知道单词,就应该提前准备前两行。无需为每个找到的行重新计算它们。Pattern.quote 引用保留字符,因此它们不会被赋予特殊含义。

于 2013-01-14T14:06:17.377 回答